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