Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| 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.