Share via


CA2243: Attributsträngliteraler ska parsas korrekt

Property Värde
Regel-ID CA2243
Rubrik Attributsträngliteraler bör parsas korrekt
Kategori Användning
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 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.

Se även