CA2243 : Les littéraux de chaîne d'attribut doivent être correctement analysés
TypeName |
AttributeStringLiteralsShouldParseCorrectly |
CheckId |
CA2243 |
Catégorie |
Microsoft.Usage |
Modification avec rupture |
Modification sans rupture |
Cause
Le paramètre de littéral de chaîne d'un attribut n'effectue pas une analyse correcte pour une URL, un GUID ou une version.
Description de la règle
Dans la mesure où les attributs sont dérivés de System.Attribute et qu'ils sont utilisés au moment de la compilation, seules les valeurs de constante 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 de type System.Uri, System.Guid et System.Version, car ces types ne peuvent pas être représentés sous forme de constantes. Ils doivent plutôt être représentés par des chaînes.
Le paramètre étant de type chaîne, il est possible qu'un paramètre mis en forme de manière incorrecte soit passé au moment de la compilation.
Cette règle utilise une heuristique de dénomination pour rechercher des paramètres qui représentent un URI (Uniform Resource Identifier), un identificateur global unique (GUID) 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 formé correctement.
Quand supprimer les avertissements
Il est possible de supprimer sans risque un avertissement de cette règle si le paramètre ne représente pas une URL, un GUID ou une version.
Exemple
L'exemple suivant indique le code de l'AssemblyFileVersionAttribute qui viole cette règle.
using System;
using System.Runtime.InteropServices;
namespace Samples
{
[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 éléments suivants :
Paramètres qui contiennent la "version" et qui ne peuvent pas être convertis en System.Version.
Paramètres qui contiennent le "guid" et qui ne peuvent pas être convertis en System.Guid.
Paramètres qui contiennent "uri", "urn" ou "url" et qui ne peuvent pas être convertis en System.Uri.