Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| Proprietà | Value |
|---|---|
| ID della regola | CA2023 |
| Titolo | Parentesi graffe non valide nel modello di messaggio |
| Categoria | Affidabilità |
| La correzione causa un'interruzione o meno | Non-breaking |
| Abilitato per impostazione predefinita in .NET 10 | Come avviso |
Motivo
Le parentesi graffe presenti nel modello di messaggio non sono valide. Verificare che le parentesi graffe nel modello di messaggio siano parentesi graffe di apertura/chiusura valide o siano precedute da un carattere di escape.
Descrizione regola
I modelli di messaggio di registrazione usano parentesi graffe { e } per indicare i segnaposto denominati per i valori. L'utilizzo di parentesi graffe non valido nei modelli di messaggio può comportare eccezioni di runtime o un comportamento di registrazione imprevisto. Questa regola rileva:
- Parentesi graffe di apertura o chiusura non corrispondenti.
- Parentesi graffe annidate senza escape.
- Altri modelli di parentesi graffa in formato non valido.
Come correggere le violazioni
Per correggere una violazione di questa regola:
- Verificare che tutte le parentesi graffe di apertura abbiano una parentesi graffa
{}di chiusura corrispondente. - Parentesi graffe letterali di escape raddoppiandole:
{{per{e}}per}. - Correggere eventuali modelli di parentesi graffa annidati o in formato non valido.
Example
Il frammento di codice seguente mostra le violazioni di 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
Il frammento di codice seguente corregge le violazioni:
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
Quando eliminare gli avvisi
Non eliminare un avviso da questa regola. Le parentesi graffe non valide nei modelli di messaggio possono causare eccezioni di runtime o output del log non corretto.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA2023
// The code that's violating the rule is on this line.
#pragma warning restore CA2023
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità su none nel file di configurazione .
[*.{cs,vb}]
dotnet_diagnostic.CA2023.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.