CA2243: Valori letterali stringa di attributo devono essere analizzate correttamente

Proprietà valore
ID regola CA2243
Titolo I valori letterali stringa di attributo devono essere analizzati correttamente
Categoria Utilizzo
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 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.

Vedi anche