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.