Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
| Propriedade | Valor |
|---|---|
| ID da regra | CA2023 |
| Título | Chaves inválidas no modelo de mensagem |
| Categoria | Reliability |
| A correção é invasiva ou não invasiva | Non-breaking |
| Habilitado por padrão no .NET 10 | Como aviso |
Motivo
As chaves presentes no modelo de mensagem são inválidas. Certifique-se de que todas as chaves no modelo de mensagem são chaves de abertura/fechamento válidas ou são escapadas.
Descrição da regra
Os modelos de mensagens de registro em log usam chaves { e } indicam espaços reservados nomeados para valores. O uso inválido de chaves em modelos de mensagem pode resultar em exceções de tempo de execução ou comportamento de log inesperado. Esta regra deteta:
- Chaves de abertura ou fecho incomparáveis.
- Chaves aninhadas que não escapam corretamente.
- Outros padrões de cinta malformados.
Como corrigir violações
Para corrigir uma violação desta regra:
- Certifique-se de que todas as chaves de
{abertura têm uma chave}de fecho correspondente. - Fuja das chaves literais duplicando-as:
{{para{e}}para}. - Corrija quaisquer padrões de chaves aninhados ou malformados.
Example
O trecho de código a seguir mostra violações do 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 trecho 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 suprima um aviso desta regra. Chaves inválidas em templates de mensagens podem causar exceções em tempo de execução ou saída incorreta do log.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 de um arquivo, pasta ou projeto, defina sua gravidade como 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.