Compartilhar via


CA2023: Chaves inválidas no modelo de mensagem

Propriedade Value
ID da regra CA2023
Title Chaves inválidas no modelo de mensagem
Categoria Reliability
Correção é disruptiva ou não disruptiva Non-breaking
Habilitado por padrão no .NET 10 Como aviso

Motivo

As chaves presentes no modelo de mensagem são inválidas. Verifique se as chaves no modelo de mensagem são chaves de abertura/fechamento válidas ou escapadas.

Descrição da regra

Os modelos de mensagem de registro em log usam chaves { e } para indicar espaços reservados nomeados para valores. O uso inválido de chaves em modelos de mensagem pode resultar em exceções de runtime ou comportamento de log inesperado. Esta regra detecta:

  • Chaves de abertura ou fechamento incompatíveis.
  • Chaves aninhadas que não escapam corretamente.
  • Outros padrões de chave malformada.

Como corrigir violações

Para corrigir uma violação desta regra:

  • Verifique se todas as chaves de { abertura têm uma chave }de fechamento correspondente.
  • Escape de chaves literais dobrando-as: {{ para { e }} para }.
  • Corrija qualquer padrão de chave aninhada ou malformada.

Example

O snippet de código a seguir mostra violações da 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

O snippet de código a seguir corrige as violações:

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 suprimir avisos

Não suprime um aviso dessa regra. Chaves inválidas em modelos de mensagem podem causar exceções de runtime ou saída de log incorreta.

Suprimir um aviso

Se você quiser suprimir apenas uma única violação, adicione diretivas de pré-processamento ao arquivo de origem para desabilitar e, em seguida, habilitar novamente a regra.

#pragma warning disable CA2023
// The code that's violating the rule is on this line.
#pragma warning restore CA2023

Para desabilitar a regra para um arquivo, pasta ou projeto, defina sua severidade none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA2023.severity = none

Para obter mais informações, consulte Como suprimir avisos de análise de código.

Consulte também