CA2243: Los literales de cadena de atributo se deben analizar correctamente
Propiedad | Value |
---|---|
Identificador de la regla | CA2243 |
Título | Los literales de cadena de atributo se deben analizar correctamente |
Categoría | Uso |
La corrección es problemática o no problemática | Poco problemático |
Habilitado de forma predeterminada en .NET 9 | No |
Causa
El parámetro de literal de cadena de un atributo no se analiza correctamente para una dirección URL, un GUID o una versión.
Descripción de la regla
Puesto que los atributos se derivan de System.Attribute y se usan en tiempo de compilación, solo se pueden pasar valores constantes a sus constructores. Los parámetros de atributo que deben representar direcciones URL, GUID y versiones no se pueden escribir como System.Uri, System.Guid y System.Version porque estos tipos no se pueden representar como constantes. En su lugar, deben representarse mediante cadenas.
Dado que el parámetro se escribe como una cadena, es posible que se pase un parámetro con un formato incorrecto en tiempo de compilación.
Esta regla usa una heurística de nomenclatura para buscar parámetros que representan un identificador uniforme de recursos (URI), un identificador único global (GUID) o una versión, y comprueba que el valor pasado sea correcto.
Cómo corregir infracciones
Cambie la cadena de parámetro a una dirección URL, un GUID o una versión correctos.
Cuándo suprimir las advertencias
Una advertencia de esta regla se puede suprimir si el parámetro no representa una dirección URL, un GUID o una versión.
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 CA2243
// The code that's violating the rule is on this line.
#pragma warning restore CA2243
Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none
del archivo de configuración.
[*.{cs,vb}]
dotnet_diagnostic.CA2243.severity = none
Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.
Ejemplo
En el ejemplo siguiente se muestra el código para AssemblyFileVersionAttribute que infringe esta regla.
[AttributeUsage(AttributeTargets.Assembly, Inherited = false)]
[ComVisible(true)]
public sealed class AssemblyFileVersionAttribute : Attribute
{
public AssemblyFileVersionAttribute(string version) { }
public string? Version { get; set; }
}
// Since the parameter is typed as a string, it is possible
// to pass an invalid version number at compile time. The rule
// would be violated by the following code: [assembly : AssemblyFileVersion("xxxxx")]
Los siguientes parámetros desencadenan la regla:
Los parámetros que contienen "version" y no se pueden analizar en System.Version.
Los parámetros que contienen "guid" y no se pueden analizar en System.Guid.
Los parámetros que contienen "uri", "urn" o "url" y no se pueden analizar en System.Uri.