CA2243: Valori letterali stringa di attributo devono essere analizzate correttamente
TypeName |
AttributeStringLiteralsShouldParseCorrectly |
CheckId |
CA2243 |
Category |
Microsoft.Usage |
Breaking Change |
Non sostanziale |
Causa
Il parametro del valore letterale stringa di un attributo non analizza correttamente un URL, un GUID o una versione.
Descrizione della regola
Poiché gli attributi sono derivati da System.Attribute e vengono utilizzati in fase di compilazione, solo i valori costanti possono essere passati ai relativi costruttori. I parametri di attribuito che devono rappresentare URL, GUID e versioni non possono essere tipizzati come System.Uri, System.Guid e System.Version, perché questi tipi non possono essere rappresentati come costanti. Devono invece essere rappresentati da stringhe.
Poiché il parametro è tipizzato come stringa, è possibile che un parametro in formato non corretto venga passato in fase di compilazione.
Questa regola utilizza un'euristica di denominazione per individuare parametri che rappresentano un URI (Uniform Resource Identifier), un GUI (Globally Unique Identifier) o una versione e verifica che il valore passato sia corretto.
Come correggere le violazioni
Impostare la stringa del parametro su un URL, un GUID o una versione in formato corretto.
Esclusione di avvisi
L'esclusione di un avviso da questa regola è sicura se il parametro non rappresenta un URL, un GUID o una versione.
Esempio
Nell'esempio riportato di seguito è illustrato il codice per AssemblyFileVersionAttribute che viola questa regola.
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")]
}
La regola viene attivata da quanto segue:
Parametri che contengono "version" e non possono essere analizzati in System.Version.
Parametri che contengono "guid" e non possono essere analizzato in System.Guid.
Parametri che contengono "uri", "urn" o "url" e non possono essere analizzati in System.Uri.