Dela via


CA2023: Ogiltiga klammerparenteser i meddelandemallen

Fastighet Värde
Regel-ID CA2023
Titel Ogiltiga klammerparenteser i meddelandemallen
Kategori Tillförlitlighet
Korrigeringen är antingen brytande eller icke-brytande Non-breaking
Aktiverad som standard i .NET 9 Som varning

Orsak

Klammerparenteserna i meddelandemallen är ogiltiga. Kontrollera att alla klammerparenteser i meddelandemallen är giltiga inledande/avslutande klammerparenteser eller att de är undantagna.

Regelbeskrivning

Loggningsmeddelandemallar använder klammerparenteser { och } anger namngivna platshållare för värden. Ogiltig klammerparentesanvändning i meddelandemallar kan resultera i körningsundatag eller oväntat loggningsbeteende. Den här regeln identifierar:

  • Omatchade inledande eller avslutande klammerparenteser.
  • Kapslade klammerparenteser som inte är korrekt undantagna.
  • Andra felaktiga klammerparentesmönster.

Så här åtgärdar du överträdelser

Så här åtgärdar du ett brott mot den här regeln:

  • Kontrollera att alla inledande klammerparenteser har motsvarande avslutande klammerparentes {}.
  • Escape literal hängslen genom att fördubbla dem: {{ för { och }} för }.
  • Åtgärda eventuella kapslade eller felaktiga klammerparentesmönster.

Example

Följande kodfragment visar överträdelser av 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

Följande kodfragment åtgärdar överträdelserna:

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

När du ska ignorera varningar

Ignorera inte en varning från den här regeln. Ogiltiga klammerparenteser i meddelandemallar kan orsaka körningsfel eller felaktiga loggutdata.

Undertryck en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.

Se även