Condividi tramite


CA2023: parentesi graffe non valide nel modello di messaggio

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.

Vedere anche