Compartir a través de


CA2243: Los literales de cadena de atributo se deben analizar correctamente

Nombre de tipo

AttributeStringLiteralsShouldParseCorrectly

Identificador de comprobación

CA2243

Categoría

Microsoft.Usage

Cambio problemático

No

Motivo

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

Dado que los atributos se derivan de System.Attribute y se utilizan en tiempo de compilación, sólo se pueden pasar valores constantes a sus constructores.Los parámetros de atributo que deben representar direcciones URL, GUID y versiones no pueden ser de tipo System.Uri, System.Guid ni System.Version, porque estos tipos no se pueden representar como constantes.Deben representarse mediante cadenas.

Dado que el parámetro es un parámetro de cadena, es posible que se pase un parámetro con formato incorrecto en tiempo de compilación.

Esta regla utiliza una heurística de nomenclatura para buscar los parámetros que representen un identificador uniforme de recursos (URI), un identificador único global (GUID) o una versión, y comprueba que el valor pasado es correcto.

Cómo corregir infracciones

Cambie la cadena de parámetro a una dirección URL, un GUID o una versión con el formato correcto.

Cuándo suprimir advertencias

Puede suprimirse de forma segura una advertencia de esta regla si el parámetro no representa una dirección URL, un GUID o una versión.

Ejemplo

En el ejemplo siguiente se muestra código para AssemblyFileVersionAttribute que infringe esta regla.

using System;
using System.Runtime.InteropServices;

namespace Samples
{
    [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:

  • Parámetros que contienen 'version' y no se pueden analizar como System.Version.

  • Parámetros que contienen 'guid' y no se pueden analizar como System.Guid.

  • Parámetros que contienen 'uri', 'urn' o 'url' y no se pueden analizar como System.Uri.

Vea también

Referencia

CA1054: Los parámetros de URI no deben ser cadenas