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.