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 8 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.

Consulte también