CA1302 : Ne pas coder en dur les chaînes spécifiques aux paramètres régionaux

Élément Valeur
ID de la règle CA1302
Category Microsoft.Globalization
Modification avec rupture Sans rupture

Cause

Une méthode utilise un littéral de chaîne qui représente une partie du chemin de certains dossiers système.

Notes

Cette règle est déconseillée. Pour plus d’informations, consultez Règles dépréciées.

Description de la règle

L’énumération System.Environment.SpecialFolder contient des membres qui référencent des dossiers système spéciaux. Les emplacements de ces dossiers peuvent avoir des valeurs différentes selon le système d’exploitation. L’utilisateur peut changer certains emplacements, et ces derniers sont localisés. Un exemple de dossier spécial est le dossier Système, qui est « C:\WINDOWS\system32 ». La méthode System.Environment.GetFolderPath renvoie les emplacements associés à l’énumération Environment.SpecialFolder. Les emplacements renvoyés par GetFolderPath sont localisés et appropriés pour l’ordinateur en cours d’exécution.

Cette règle tokenise les chemins de dossier récupérés en utilisant la méthode GetFolderPath dans des niveaux de répertoire distincts. Chaque littéral de chaîne est comparé aux jetons. Si une correspondance est trouvée, la méthode doit créer une chaîne qui référence l’emplacement système associé au jeton. Pour la portabilité et la localisabilité, utilisez la méthode GetFolderPath pour récupérer les emplacements des dossiers système spéciaux au lieu d’utiliser des littéraux de chaîne.

Comment corriger les violations

Pour corriger une infraction à cette règle, récupérez l’emplacement avec la méthode GetFolderPath.

Quand supprimer les avertissements

Vous pouvez supprimer un avertissement de cette règle si le littéral de chaîne n’est pas utilisé pour référencer un des emplacements système associés à l’énumération Environment.SpecialFolder.

Exemple

L’exemple suivant génère le chemin du dossier de données d’application commun, qui génère trois avertissements à partir de cette règle. Ensuite, l’exemple récupère le chemin avec la méthode GetFolderPath.

using System;

namespace GlobalizationLibrary
{
   class WriteSpecialFolders
   {
      static void Main()
      {
         string string0 = "C:";

         // Each of the following three strings violates the rule.
         string string1 = @"\Documents and Settings";
         string string2 = @"\All Users";
         string string3 = @"\Application Data";
         Console.WriteLine(string0 + string1 + string2 + string3);

         // The following statement satisfies the rule.
         Console.WriteLine(Environment.GetFolderPath(
            Environment.SpecialFolder.CommonApplicationData));
      }
   }
}

CA1303 : Ne pas passer de littéraux en paramètres localisés