Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
| Propiedad | Importancia |
|---|---|
| Identificador de la regla | CA2023 |
| Título | Llaves no válidas en la plantilla de mensaje |
| Categoría | Reliability |
| La corrección es disruptiva o no disruptiva | Non-breaking |
| Habilitado de forma predeterminada en .NET 10 | Como advertencia |
Causa
Las llaves presentes en la plantilla de mensaje no son válidas. Asegúrese de que las llaves de la plantilla de mensaje sean llaves de apertura y cierre válidas o que se escapen.
Descripción de la regla
Las plantillas de mensaje de registro usan llaves { y } para indicar marcadores de posición con nombre para los valores. El uso de llaves no válido en las plantillas de mensaje puede dar lugar a excepciones en tiempo de ejecución o a un comportamiento de registro inesperado. Esta regla detecta lo siguiente:
- Llaves de apertura o cierre no coincidentes.
- Llaves anidadas que no se escapan correctamente.
- Otros patrones de llaves malformadas.
Cómo corregir infracciones
Para corregir una infracción de esta regla haga lo siguiente:
- Asegúrese de que todas las llaves
{de apertura tengan una llave}de cierre correspondiente. - Llaves literales de escape al duplicarlas:
{{para{y}}para}. - Corrija los patrones de llave anidados o incorrectos.
Example
El siguiente fragmento de código muestra infracciones de 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
El siguiente fragmento de código corrige las infracciones:
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
Cuándo suprimir las advertencias
No suprima una advertencia de esta regla. Las llaves no válidas en las plantillas de mensaje pueden provocar excepciones en tiempo de ejecución o una salida de registro incorrecta.
Supresión de una advertencia
Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.
#pragma warning disable CA2023
// The code that's violating the rule is on this line.
#pragma warning restore CA2023
Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad a none en el archivo de configuración.
[*.{cs,vb}]
dotnet_diagnostic.CA2023.severity = none
Para obtener más información, consulte Cómo suprimir advertencias de análisis de código.