Partager via


CA2023 : Accolades non valides dans le modèle de message

Propriété Valeur
Identificateur de la règle CA2023
Titre Accolades non valides dans le modèle de message
Catégorie Fiabilité
Le correctif est cassant ou non cassant Non-breaking
Activé par défaut dans .NET 10 Comme avertissement

La cause

Les accolades présentes dans le modèle de message ne sont pas valides. Vérifiez que toutes les accolades dans le modèle de message sont des accolades ouvrantes/fermante valides ou sont échappées.

Description de la règle

Les modèles de message de journalisation utilisent des { accolades et } indiquent les espaces réservés nommés pour les valeurs. L’utilisation des accolades non valides dans les modèles de message peut entraîner des exceptions d’exécution ou un comportement de journalisation inattendu. Cette règle détecte :

  • Accolades ouvrantes ou fermante sans correspondance.
  • Accolades imbriquées qui ne sont pas correctement échappées.
  • Autres modèles d’accolades mal formés.

Comment corriger les violations

Pour corriger toute violation de cette règle :

  • Vérifiez que toutes les accolades ouvrantes { ont une accolade }fermante correspondante.
  • Accolades littérales d’échappement en les doublant : {{ pour { et }} pour }.
  • Corrigez les modèles d’accolades imbriquées ou mal formées.

Example

L’extrait de code suivant montre les violations de CA2023 :

using Microsoft.Extensions.Logging;

class Example
{
    private readonly ILogger _logger;

    public Example(ILogger<Example> logger)
    {
        _logger = logger;
    }

    public void LogData(string name, int value)
    {
        // Violation: unmatched opening brace.
        _logger.LogInformation("Processing {Name with value {Value}", name, value);

        // Violation: unmatched closing brace.
        _logger.LogInformation("Processing Name} with value {Value}", name, value);
    }
}
Imports Microsoft.Extensions.Logging

Class Example
    Private ReadOnly _logger As ILogger

    Public Sub New(logger As ILogger(Of Example))
        _logger = logger
    End Sub

    Public Sub LogData(name As String, value As Integer)
        ' Violation: unmatched opening brace.
        _logger.LogInformation("Processing {Name with value {Value}", name, value)

        ' Violation: unmatched closing brace.
        _logger.LogInformation("Processing Name} with value {Value}", name, value)
    End Sub
End Class

L’extrait de code suivant corrige les violations :

using Microsoft.Extensions.Logging;

class Example
{
    private readonly ILogger _logger;

    public Example(ILogger<Example> logger)
    {
        _logger = logger;
    }

    public void LogData(string name, int value)
    {
        // Fixed: proper braces.
        _logger.LogInformation("Processing {Name} with value {Value}", name, value);

        // Fixed: escaped literal braces.
        _logger.LogInformation("Processing {{Name}} with value {Value}", name, value);
    }
}
Imports Microsoft.Extensions.Logging

Class Example
    Private ReadOnly _logger As ILogger

    Public Sub New(logger As ILogger(Of Example))
        _logger = logger
    End Sub

    Public Sub LogData(name As String, value As Integer)
        ' Fixed: proper braces.
        _logger.LogInformation("Processing {Name} with value {Value}", name, value)

        ' Fixed: escaped literal braces.
        _logger.LogInformation("Processing {{Name}} with value {Value}", name, value)
    End Sub
End Class

Quand supprimer les avertissements

Ne supprimez pas un avertissement de cette règle. Les accolades non valides dans les modèles de message peuvent entraîner des exceptions d’exécution ou une sortie de journal incorrecte.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

#pragma warning disable CA2023
// The code that's violating the rule is on this line.
#pragma warning restore CA2023

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

[*.{cs,vb}]
dotnet_diagnostic.CA2023.severity = none

Pour plus d’informations, consultez Comment supprimer les avertissements d’analyse du code.

Voir aussi