CA2243 : Les littéraux de chaîne d'attribut doivent être analysés correctement

Propriété Value
Identificateur de la règle CA2243
Titre Les littéraux de chaîne d'attribut doivent être analysés correctement
Catégorie Utilisation
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Non

Cause

Le paramètre de littéral de chaîne d’un attribut n’est pas analysé correctement pour une URL, un GUID ou une version.

Description de la règle

Étant donné que les attributs sont dérivés de System.Attribute, et qu’ils sont utilisés au moment de la compilation, seules des valeurs constantes peuvent être passées à leurs constructeurs. Les paramètres d’attribut qui doivent représenter des URL, des GUID et des versions ne peuvent pas être typés en tant que System.Uri, System.Guid et System.Version, car ces types ne peuvent pas être représentés en tant que constantes. Au lieu de cela, ils doivent être représentés par des chaînes.

Le paramètre étant typé sous la forme d’une chaîne, il est possible qu’un paramètre mal mis en forme soit passé au moment de la compilation.

Cette règle utilise une heuristique de nommage pour rechercher les paramètres qui représentent un URI (Uniform Resource Identifier), un GUID (Global Unique Identifier) ou une version, et vérifie que la valeur passée est correcte.

Comment corriger les violations

Remplacez la chaîne de paramètre par une URL, un GUID ou une version correctement mis(e) en forme.

Quand supprimer les avertissements

Vous pouvez sans risque supprimer un avertissement de cette règle si le paramètre ne représente pas une URL, un GUID ou une version.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

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

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

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

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.

Exemple

L’exemple suivant montre du code pour l’attribut AssemblyFileVersionAttribute qui enfreint cette règle.

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

La règle est déclenchée par les paramètres suivants :

  • Les paramètres qui contiennent 'version' et ne peuvent pas être analysés par rapport à System.Version.

  • Les paramètres qui contiennent 'guid' et ne peuvent pas être analysés par rapport à System.Guid.

  • Les paramètres qui contiennent 'uri', 'urn' ou 'url' et qui ne peuvent pas être analysés par rapport à System.Uri.

Voir aussi