Freigeben über


CA2243: Attribute-Zeichenfolgenliterale müssen stets richtig analysiert werden

TypeName

AttributeStringLiteralsShouldParseCorrectly

CheckId

CA2243

Kategorie

Microsoft.Usage

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Der Parameter eines Attribute-Zeichenfolgenliterals wird für eine URL, GUID oder Version nicht ordnungsgemäß analysiert.

Regelbeschreibung

Da Attribute von System.Attribute abgeleitet und zur Kompilierzeit verwendet werden, können nur konstante Werte an ihre Konstruktoren übergeben werden. Attributparameter zur Darstellung von URLs, GUIDs und Versionen dürfen nicht als System.Uri, System.Guid und System.Version typisiert werden, da diese Typen nicht als Konstanten dargestellt werden können. Stattdessen müssen sie durch Zeichenfolgen dargestellt werden.

Da der Parameter als Zeichenfolge typisiert wird, ist es möglich, dass zur Kompilierzeit ein falsch formatierter Parameter übergeben wird.

Diese Regel sucht Parameter, die einen Uniform Resource Identifier (URI), einen Globally Unique Identifier (GUID) oder eine Version darstellen, anhand einer Namensheuristik und stellt sicher, dass der übergebene Wert richtig ist.

Behandeln von Verstößen

Ändern Sie die Parameterzeichenfolge in eine URL, GUID oder Version im richtigen Format.

Wann sollten Warnungen unterdrückt werden?

Eine Warnung dieser Regel kann gefahrlos unterdrückt werden, wenn der Parameter keine URL, GUID oder Version darstellt.

Beispiel

Im folgenden Beispiel wird Code für das AssemblyFileVersionAttribute veranschaulicht, das gegen diese Regel verstößt.

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

Die Regel wird durch folgende Parameter ausgelöst:

  • Parameter, die 'Version' enthalten und nicht in System.Version ausgewertet werden können.

  • Parameter, die 'guid' enthalten und nicht in System.Guid ausgewertet werden können.

  • Parameter, die 'uri', 'urn' oder 'url' enthalten und nicht in System.Uri ausgewertet werden können.

Siehe auch

Referenz

CA1054: URI-Parameter dürfen keine Zeichenfolgen sein