Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
| Eigentum | Wert |
|---|---|
| Regel-ID | CA2023 |
| Title | Ungültige geschweifte Klammern in nachrichtenvorlage |
| Kategorie | Reliability |
| Korrektur ist blockierend oder nicht-blockierend | Non-breaking |
| Standardmäßig in .NET 10 aktiviert | Als Warnung |
Ursache
Die in der Nachrichtenvorlage vorhandenen geschweiften Klammern sind ungültig. Stellen Sie sicher, dass alle geschweiften Klammern in der Nachrichtenvorlage gültige öffnende oder schließende geschweifte Klammern sind oder escapen.
Regelbeschreibung
Die Protokollierung von Nachrichtenvorlagen verwendet geschweifte Klammern { und } bezeichnet benannte Platzhalter für Werte. Ungültige Klammernverwendung in Nachrichtenvorlagen kann zu Laufzeit-Ausnahmen oder unerwartetem Protokollierungsverhalten führen. Diese Regel erkennt Folgendes:
- Nicht übereinstimmende öffnende oder schließende geschweifte Klammern.
- Geschachtelte geschweifte Klammern, die nicht ordnungsgemäß escaped sind.
- Andere falsch formatierte geschweifte Klammermuster.
Wie man Verstöße behebt
Um einen Verstoß gegen diese Regel zu beheben:
- Stellen Sie sicher, dass alle öffnenden Klammern
{über eine entsprechende schließende Klammer}verfügen. - Escape literal geschweifte Klammern durch Verdoppelung:
{{für{und}}für}. - Korrigieren Sie alle geschachtelten oder falsch formatierten Klammermuster.
Example
Der folgende Codeausschnitt zeigt Verstöße gegen 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
Der folgende Codeausschnitt behebt die Verletzungen:
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
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnung aus dieser Regel. Ungültige geschweifte Klammern in Nachrichtenvorlagen können Laufzeitausnahmen oder falsche Protokollausgabe verursachen.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA2023
// The code that's violating the rule is on this line.
#pragma warning restore CA2023
Deaktivieren Sie die Regel für eine Datei, einen Ordner oder ein Projekt, indem Sie den Schweregrad in der none auf setzen.
[*.{cs,vb}]
dotnet_diagnostic.CA2023.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.