CA2243 : Les littéraux de chaîne d'attribut doivent être correctement analysésCA2243: Attribute string literals should parse correctly

TypeNameTypeName AttributeStringLiteralsShouldParseCorrectlyAttributeStringLiteralsShouldParseCorrectly
CheckIdCheckId CA2243CA2243
CategoryCategory Microsoft.UsageMicrosoft.Usage
Modification avec ruptureBreaking Change Sans ruptureNon Breaking

CauseCause

Paramètre de littéral de chaîne d’un attribut n’analyse pas correctement pour une URL, un GUID ou une Version.An attribute's string literal parameter does not parse correctly for a URL, GUID, or Version.

Description de la règleRule description

Dans la mesure où les attributs sont dérivés de System.Attributeet ils sont utilisés au moment de la compilation, seules des valeurs constantes peuvent être passées à leurs constructeurs.Since attributes are derived from System.Attribute, and attributes are used at compile time, only constant values can be passed to their constructors. Paramètres d’attribut qui doivent représenter des URL, des GUID et des Versions ne peut pas être de type System.Uri, System.Guid, et System.Version, car ces types ne peuvent pas être représentés en tant que constantes.Attribute parameters that must represent URLs, GUIDs, and Versions cannot be typed as System.Uri, System.Guid, and System.Version, because these types cannot be represented as constants. Au lieu de cela, ils doivent être représentées par des chaînes.Instead, they must be represented by strings.

Étant donné que le paramètre est typé en tant que chaîne, il est possible qu’un paramètre au format incorrect peut être passé au moment de la compilation.Because the parameter is typed as a string, it is possible that an incorrectly formatted parameter could be passed at compile time.

Cette règle utilise une heuristique d’affectation de noms pour rechercher des paramètres qui représentent un identificateur de ressource uniforme (URI), un identificateur global Unique (GUID) ou une Version et vérifie que la valeur passée est correcte.This rule uses a naming heuristic to find parameters that represent a uniform resource identifier (URI), a Globally Unique Identifier (GUID), or a Version, and verifies that the passed value is correct.

Comment corriger les violationsHow to fix violations

Modifier la chaîne de paramètre à une URL, GUID ou Version correctement formé.Change the parameter string to a correctly formed URL, GUID, or Version.

Quand supprimer les avertissementsWhen to suppress warnings

Il est possible de supprimer un avertissement de cette règle si le paramètre ne représente pas une URL, un GUID ou une Version sans.It is safe to suppress a warning from this rule if the parameter does not represent a URL, GUID, or Version.

ExempleExample

L’exemple suivant montre le code de l’AssemblyFileVersionAttribute qui enfreint cette règle.The following example shows code for the AssemblyFileVersionAttribute that violates this rule.

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 paramètres suivants :The rule is triggered by the following parameters:

  • Paramètres qui contiennent « version » et ne peut pas être analysées à System.Version.Parameters that contain 'version' and cannot be parsed to System.Version.

  • Paramètres qui contiennent des 'guid' et ne peut pas être analysées à System.Guid.Parameters that contain 'guid' and cannot be parsed to System.Guid.

  • Paramètres qui contiennent « uri », « urn » ou « url » et ne peut pas être analysées en System.Uri.Parameters that contain 'uri', 'urn', or 'url' and cannot be parsed to System.Uri.

Voir aussiSee also