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.