Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| 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.