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