CA2243: Attribute-Zeichenfolgenliterale müssen stets richtig analysiert werden.
Eigenschaft | Wert |
---|---|
Regel-ID | CA2243 |
Titel | Attribute-Zeichenfolgenliterale müssen stets richtig analysiert werden. |
Kategorie | Verwendung |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 8 aktiviert | Nein |
Ursache
Der Parameter des Zeichenfolgenliterals eines Attributs wird für eine URL, GUID oder Version nicht ordnungsgemäß analysiert.
Regelbeschreibung
Da Attribute von System.Attribute abgeleitet werden und Attribute zur Kompilierzeit verwendet werden, können nur konstante Werte an Ihre Konstruktoren übergeben werden. Attributparameter, die URLs, GUIDs und Versionen darstellen müssen, können nicht als System.Uri , System.Guid und System.Version eingegeben 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 ist, kann es vorkommen, dass ein falsch formatierter Parameter zum Zeitpunkt der Kompilierung übergeben werden kann.
Diese Regel verwendet eine Namensheuristik, um Parameter zu suchen, die einen URI (Uniform Resource Identifier), einen global eindeutigen Bezeichner (GUID) oder eine Version darstellen, und überprüft, ob der durchgegangene Wert korrekt ist.
Behandeln von Verstößen
Ändern Sie die Parameterzeichenfolge in eine ordnungsgemäß formatierte URL, GUID oder Version.
Wann sollten Warnungen unterdrückt werden?
Eine Warnung dieser Regel kann sicher unterdrückt werden, wenn es sich bei dem Zeichenfolgenparameter nicht um einen URL, GUID oder Version handelt.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA2243
// The code that's violating the rule is on this line.
#pragma warning restore CA2243
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none
fest.
[*.{cs,vb}]
dotnet_diagnostic.CA2243.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.
Beispiel
Das folgende Beispiel zeigt den Code für AssemblyFileVersion-Attribut, das gegen diese Regel verstößt.
[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 die folgenden Parameter ausgelöst:
Parameter, die „Version“ enthalten und nicht in „System.Version“ analysiert werden können.
Parameter, die „guid“ enthalten und nicht in „System.Guid“ analysiert werden können.
Parameter, die „uri“, „urn“ oder „url“ enthalten und nicht in '“System.Uri“ analysiert werden können.