CA2243: Literály řetězce atributu by se měly správně analyzovat

Vlastnost Hodnota
ID pravidla CA2243
Název Řetězcové literály atributů by se měly správně parsovat
Kategorie Využití
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 No

Příčina

Řetězcový literál parametr atributu neanalyzuje správně pro adresu URL, identifikátor GUID nebo verzi.

Popis pravidla

Vzhledem k tomu, že atributy jsou odvozeny od System.Attributea atributy se používají v době kompilace, lze do jejich konstruktorů předat pouze konstantní hodnoty. Parametry atributu, které musí představovat adresy URL, identifikátory GUID a verze, nelze zadat jako System.Uri, System.Guida System.Version, protože tyto typy nelze reprezentovat jako konstanty. Místo toho musí být reprezentovány řetězci.

Protože parametr je zadán jako řetězec, je možné, že nesprávně formátovaný parametr může být předán v době kompilace.

Toto pravidlo používá heuristické pojmenování k vyhledání parametrů, které představují identifikátor URI (Uniform Resource Identifier), globálně jedinečný identifikátor (GUID) nebo verzi a ověřuje správnost předávané hodnoty.

Jak opravit porušení

Změňte řetězec parametru na správně formátovanou adresu URL, identifikátor GUID nebo verzi.

Kdy potlačit upozornění

Pokud parametr nepředstavuje adresu URL, identifikátor GUID nebo verzi, je bezpečné potlačit upozornění z tohoto pravidla.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

#pragma warning disable CA2243
// The code that's violating the rule is on this line.
#pragma warning restore CA2243

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

[*.{cs,vb}]
dotnet_diagnostic.CA2243.severity = none

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Příklad

Následující příklad ukazuje kód AssemblyFileVersionAttribute, který porušuje toto pravidlo.

[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")]

Pravidlo se aktivuje následujícími parametry:

  • Parametry, které obsahují "version" a nelze je analyzovat na System.Version.

  • Parametry, které obsahují identifikátor GUID a nelze je analyzovat na System.Guid.

  • Parametry, které obsahují identifikátor URI, urn nebo url a nelze je analyzovat na System.Uri.

Viz také