CA2243: Attributsträngliteraler ska parsas korrekt
Property | Värde |
---|---|
Regel-ID | CA2243 |
Title | Attributsträngliteraler bör parsas korrekt |
Kategori | Användning |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Nej |
Orsak
Ett attributs strängliteralparameter parsar inte korrekt för en URL, GUID eller version.
Regelbeskrivning
Eftersom attribut härleds från System.Attributeoch attribut används vid kompileringstid kan endast konstanta värden skickas till konstruktorerna. Attributparametrar som måste representera URL:er, GUID och versioner kan inte skrivas som System.Uri, System.Guidoch System.Version, eftersom dessa typer inte kan representeras som konstanter. I stället måste de representeras av strängar.
Eftersom parametern skrivs som en sträng är det möjligt att en felaktigt formaterad parameter kan skickas vid kompileringstillfället.
Den här regeln använder en namngivnings-heuristisk för att hitta parametrar som representerar en enhetlig resursidentifierare (URI), en globalt unik identifierare (GUID) eller en version och verifierar att det överförda värdet är korrekt.
Så här åtgärdar du överträdelser
Ändra parametersträngen till en korrekt utformad URL, GUID eller version.
När du ska ignorera varningar
Det är säkert att ignorera en varning från den här regeln om parametern inte representerar en URL, GUID eller version.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA2243
// The code that's violating the rule is on this line.
#pragma warning restore CA2243
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA2243.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Exempel
I följande exempel visas kod för AssemblyFileVersionAttribute som bryter mot den här regeln.
[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")]
Regeln utlöses av följande parametrar:
Parametrar som innehåller "version" och som inte kan parsas till System.Version.
Parametrar som innehåller "guid" och som inte kan parsas till System.Guid.
Parametrar som innehåller "uri", "urn" eller "url" och som inte kan parsas till System.Uri.