Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
| 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.