Freigeben über


CA2023: Ungültige geschweifte Klammern in der Nachrichtenvorlage

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.

Siehe auch