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
Linguaggi applicabili C# e Visual Basic

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