CA2243: Literály řetězce atributu by se měly správně analyzovat
Název_typu |
AttributeStringLiteralsShouldParseCorrectly |
CheckId |
CA2243 |
Kategorie |
Microsoft.Usage |
Změnit rozdělení |
Bez rozdělení |
Příčina
Literál parametr řetězec atributu nesprávně analyzuje adresu URL, identifikátor GUID nebo verze.
Popis pravidla
Protože atributy jsou odvozeny z Attributea atributy se používají v době kompilace, pouze konstantní hodnoty mohou být předány do jejich konstruktory.Atribut parametry, které musí představovat verze, identifikátory GUID a adresy URL nelze zadat jako Uri, Guid, a Version, protože tyto typy nemůže být reprezentován jako konstanty.Místo toho se musí být zastoupena řetězce.
Protože je parametr zadán jako řetězec, je nesprávně formátovaný parametru nelze předávat v době kompilace.
Toto pravidlo používá pojmenování Heuristika získat parametry, které představují uniform resource identifier (URI) globálně jedinečný identifikátor (GUID) nebo verzi a ověří předané hodnotě.
Jak opravit porušení
Změňte řetězec parametru správně vytvořené adresy URL, identifikátor GUID nebo verze.
Při potlačení upozornění
Je bezpečné potlačit varování od tohoto pravidla, pokud je parametr nepředstavuje URL, identifikátor GUID nebo verze.
Příklad
Následující příklad zobrazuje kód pro AssemblyFileVersionAttribute, který porušuje pravidlo.
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")]
}
Pravidlo spouští následující:
Parametry, které obsahují 'verze' a k System.Version nelze analyzovat.
Parametry, které obsahují guid"a k System.Guid nelze analyzovat.
Parametry, které obsahují 'uri', 'urn' nebo 'url' a k System.Uri nelze analyzovat.