CA2243: Valori letterali stringa di attributo devono essere analizzate correttamente
Proprietà | valore |
---|---|
ID regola | CA2243 |
Title | I valori letterali stringa di attributo devono essere analizzati correttamente |
Categoria | Utilizzo |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | No |
Causa
Il parametro letterale stringa di un attributo non analizza correttamente un URL, un GUID o una versione.
Descrizione regola
Poiché gli attributi sono derivati da System.Attributee gli attributi vengono usati in fase di compilazione, solo i valori costanti possono essere passati ai relativi costruttori. I parametri di attributo che devono rappresentare URL, GUID e Versioni non possono essere tipizzato come System.Uri, System.Guide 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 formattato in modo non corretto possa essere passato in fase di compilazione.
Questa regola usa un'euristica dei nomi per trovare i parametri che rappresentano un URI (Uniform Resource Identifier), un IDENTIFICATORe univoco globale (GUID) o una versione e verifica che il valore passato sia corretto.
Come correggere le violazioni
Modificare la stringa del parametro impostando un URL, un GUID o una versione correttamente formati.
Quando eliminare gli avvisi
È possibile eliminare un avviso da questa regola se il parametro non rappresenta un URL, un GUID o una versione.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA2243
// The code that's violating the rule is on this line.
#pragma warning restore CA2243
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA2243.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempio
Nell'esempio seguente viene illustrato il codice per AssemblyFileVersionAttribute che viola questa regola.
[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 dai parametri seguenti:
Parametri che contengono 'version' e non possono essere analizzati in System.Version.
Parametri che contengono 'guid' e non possono essere analizzati in System.Guid.
I parametri che contengono 'uri', 'urn' o 'url' e non possono essere analizzati in System.Uri.