Udostępnij za pośrednictwem


CA2243: Literały ciągu atrybutu powinny być analizowane poprawnie

TypeName

AttributeStringLiteralsShouldParseCorrectly

CheckId

CA2243

Kategoria

Microsoft.Usage

Zmiana kluczowa

Niekluczowa

Przyczyna

Parametr o typie literału łańcuchowego atrybutu nie analizuje poprawnie adresu URL, identyfikatora GUID lub Wersji.

Opis reguły

Ponieważ atrybuty są pochodnymi Attribute i atrybuty są używane w czasie kompilacji, jedynie wartości stałe mogą być przekazane do ich konstruktorów.Parametry atrybutów, które muszą reprezentować adresy URL, identyfikatory GUID i wersje nie mogą być wpisane jako Uri, Guid, i Version, ponieważ te typy nie mogą być reprezentowane jako stałe.Zamiast tego muszą być reprezentowane jako ciągi.

Ponieważ parametr jest wpisany jako ciąg znaków, jest możliwe, że nieprawidłowo sformatowany parametr mógłby być przejść przez proces kompilacji.

Ta reguła używa heurystyki nazw aby znaleźć parametry, które reprezentują uniform resource identifier (URI), unikatowy identyfikator globalny (GUID) lub Wersję i sprawdza, że przekazana wartość jest prawidłowa.

Jak naprawić naruszenia

Należy zmienić parametr w postaci ciągu na poprawnie sformułowany adres URL, identyfikator GUID lub Wersję.

Kiedy pominąć ostrzeżenia

Można bezpiecznie pominąć ostrzeżenie od tej reguły, jeśli parametr nie reprezentuje adresu URL, identyfikatora GUID ani Wersji.

Przykład

Poniższy przykład pokazuje kod dla AssemblyFileVersionAttribute, który narusza tą regułę.

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

Reguła zostanie wywołana przez następujące:

  • Parametry, które zawierają "version" i nie mogą być skonwertowane do System.Version.

  • Parametry, które zawierają "guid" i nie mogą być skonwertowane do System.Guid.

  • Parametry, które zawierają "uri", "urn", or "url" i nie mogą być skonwertowane do System.Uri.

Zobacz też

Informacje

CA1054: Parametry identyfikatora URI nie powinny być ciągami