Udostępnij za pomocą


CA2023: Nieprawidłowe nawiasy klamrowe w szablonie wiadomości

Majątek Wartość
Identyfikator reguły CA2023
Tytuł Nieprawidłowe nawiasy klamrowe w szablonie wiadomości
Kategoria Niezawodność
Poprawka jest przełomowa lub nieprzełomowa Non-breaking
Domyślnie włączone na platformie .NET 10 Jako ostrzeżenie

Przyczyna

Nawiasy klamrowe obecne w szablonie wiadomości są nieprawidłowe. Upewnij się, że wszystkie nawiasy klamrowe w szablonie wiadomości są prawidłowymi nawiasami klamrowymi otwierającymi/zamykającymi lub są zamykane.

Opis reguły

Rejestrowanie szablonów komunikatów używa nawiasów klamrowych { i } oznaczania nazwanych symboli zastępczych dla wartości. Nieprawidłowe użycie nawiasów klamrowych w szablonach komunikatów może spowodować wyjątki środowiska uruchomieniowego lub nieoczekiwane zachowanie rejestrowania. Ta reguła wykrywa:

  • Niedopasowane nawiasy klamrowe otwierające lub zamykające.
  • Zagnieżdżone nawiasy klamrowe, które nie są prawidłowo ucieczki.
  • Inne źle sformułowane wzory nawiasów klamrowych.

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły:

  • Upewnij się, że wszystkie otwierające nawiasy klamrowe { mają odpowiadający nawias klamrowy }zamykający .
  • Nawiasy klamrowe literału ucieczki, podwojając je: {{ dla { i }} dla }.
  • Napraw wszelkie zagnieżdżone lub źle sformułowane wzorce nawiasów klamrowych.

Example

Poniższy fragment kodu przedstawia naruszenia 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

Poniższy fragment kodu naprawia naruszenia:

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

Kiedy pomijać ostrzeżenia

Nie pomijaj ostrzeżenia z tej reguły. Nieprawidłowe nawiasy klamrowe w szablonach komunikatów mogą powodować wyjątki środowiska uruchomieniowego lub nieprawidłowe dane wyjściowe dziennika.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Zobacz także