Språk
Kommentar
Å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 10 | Som varning |
| Tillämpliga språk | C# och Visual Basic |
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örningsundatag 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.