Sdílet prostřednictvím


CA2023: Neplatné složené závorky v šabloně zprávy

Vlastnictví Hodnota
Identifikátor pravidla CA2023
Titul Neplatné složené závorky v šabloně zprávy
Kategorie Reliability
Oprava je destruktivní nebo nedestruktivní Non-breaking
Povoleno ve výchozím nastavení v .NET 10 Jako upozornění

Příčina

Složené závorky v šabloně zprávy jsou neplatné. Ujistěte se, že všechny složené závorky v šabloně zprávy jsou platné levá a pravá složená závorka nebo jsou uvozené.

Popis pravidla

Šablony zpráv protokolování používají složené závorky { a } označují pojmenované zástupné symboly pro hodnoty. Neplatné použití závorek v šablonách zpráv může vést k výjimkám za běhu nebo neočekávanému chování protokolování. Toto pravidlo zjistí:

  • Chybějící levá nebo pravá složená závorka
  • Vnořené složené závorky, které nejsou správně uchvácené.
  • Jiné poškozené vzory závorek.

Jak opravit porušení

Oprava porušení tohoto pravidla:

  • Ujistěte se, že všechny levá závorka { mají odpovídající pravou složenou závorku }.
  • Řídicí literály tak, že je zdvojnásobíte: {{ pro { a }} pro }.
  • Opravte všechny vnořené nebo poškozené vzory závorek.

Example

Následující fragment kódu ukazuje porušení 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

Následující fragment kódu opravuje porušení:

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

Kdy potlačit upozornění

Nepotlačujte upozornění z tohoto pravidla. Neplatné složené závorky v šablonách zpráv můžou způsobit výjimky za běhu nebo nesprávný výstup protokolu.

Potlačte upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Chcete-li pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost na none v konfiguračním souboru .

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Viz také