Share via


CA2243: Letterlijke kenmerktekenreeksen moeten correct worden geparseerd

Eigenschappen Weergegeven als
Regel-id CA2243
Titel Letterlijke kenmerktekenreeksen moeten correct worden geparseerd
Categorie Gebruik
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 9 Nee

Oorzaak

De letterlijke parameter tekenreeks van een kenmerk parseert niet correct voor een URL, GUID of versie.

Beschrijving van regel

Omdat kenmerken worden afgeleid van System.Attribute, en kenmerken worden gebruikt tijdens het compileren, kunnen alleen constante waarden worden doorgegeven aan hun constructors. Kenmerkparameters die URL's, GUID's en versies moeten vertegenwoordigen, kunnen niet worden getypt als System.Uri, System.Guiden System.Versionomdat deze typen niet als constanten kunnen worden weergegeven. In plaats daarvan moeten ze worden vertegenwoordigd door tekenreeksen.

Omdat de parameter is getypt als een tekenreeks, is het mogelijk dat een onjuist opgemaakte parameter kan worden doorgegeven tijdens het compileren.

Deze regel gebruikt een heuristische naamgeving om parameters te vinden die een URI (Uniform Resource Identifier), een GUID (Globally Unique Identifier) of een versie vertegenwoordigen en controleert of de doorgegeven waarde juist is.

Schendingen oplossen

Wijzig de parametertekenreeks in een correct gevormde URL, GUID of Versie.

Wanneer waarschuwingen onderdrukken

Het is veilig om een waarschuwing van deze regel te onderdrukken als de parameter geen URL, GUID of versie vertegenwoordigt.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

#pragma warning disable CA2243
// The code that's violating the rule is on this line.
#pragma warning restore CA2243

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.

[*.{cs,vb}]
dotnet_diagnostic.CA2243.severity = none

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.

Opmerking

In het volgende voorbeeld ziet u code voor de AssemblyFileVersionAttribute die deze regel schendt.

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

De regel wordt geactiveerd door de volgende parameters:

  • Parameters die versie bevatten en kunnen niet worden geparseerd naar System.Version.

  • Parameters die guid bevatten en kunnen niet worden geparseerd naar System.Guid.

  • Parameters die 'uri', 'urn' of 'URL' bevatten en kunnen niet worden geparseerd naar System.Uri.

Zie ook