Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
| 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.