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

Étant donné que les attributs sont dérivés de System.Attributeet ils sont utilisés au moment de la compilation, uniquement les valeurs de 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 peut pas être représentées sous forme de 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 de dénomination 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

Modifiez la chaîne de paramètre à une URL, GUID ou Version formée correctement.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.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 viole 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 éléments suivants :The rule is triggered by the following:

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

  • Paramètres qui contiennent 'guid' et ne peut pas être analysées aux 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

CA1054 : Les paramètres d’URI ne doivent pas être des chaînesCA1054: URI parameters should not be strings