Sdílet prostřednictvím


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.

Viz také

Referenční dokumentace

CA1054: Parametry identifikátoru URI by neměly být řetězce