CA1302 : Ne pas coder en dur les chaînes spécifiques aux paramètres régionaux
TypeName |
DoNotHardcodeLocaleSpecificStrings |
CheckId |
CA1302 |
Catégorie |
Microsoft.Globalization |
Modification avec rupture |
Modification sans rupture |
Cause
Une méthode utilise un littéral de chaîne qui représente une partie du chemin d'accès à certains dossiers système.
Description de la règle
L'énumération System.Environment.SpecialFolder contient des membres qui font référence à des dossiers système spéciaux. Les emplacements de ces dossiers peuvent avoir des valeurs divergentes selon le système d'exploitation ; l'utilisateur peut modifier certains des emplacements, et ces derniers sont localisés. Un exemple d'un dossier spécial est le dossier système, qui est « C:\WINDOWS\system32 » sur Windows XP, mais "C:\WINNT\system32" sur Windows 2000. La méthode Environment.GetFolderPath retourne les emplacements associés à l'énumération Environment.SpecialFolder. Les emplacements retournés par GetFolderPath sont localisés et adaptés à l'ordinateur en cours d'exécution.
Cette règle régit sous forme de jeton les chemins d'accès aux dossiers récupérés par le biais de la méthode GetFolderPath dans différents niveaux de répertoires séparés. Chaque littéral de chaîne est comparé aux jetons. Si une correspondance est trouvée, la méthode est censée générer une chaîne qui fait référence à l'emplacement système associé au jeton. Par souci de portabilité et d'adaptabilité, 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 résoudre une violation de cette règle, récupérez l'emplacement à l'aide de la méthode GetFolderPath.
Quand supprimer les avertissements
Il est possible de supprimer sans risque un avertissement de cette règle si le littéral de chaîne n'est pas utilisé pour référencer l'un des emplacements système associés à l'énumération Environment.SpecialFolder.
Exemple
L'exemple suivant génère le chemin d'accès au dossier Application Data commun, qui génère trois avertissements issus de cette règle. Ensuite, l'exemple récupère le chemin d'accès à l'aide de la méthode GetFolderPath.
Imports System
Namespace GlobalizationLibrary
Class WriteSpecialFolders
Shared Sub Main()
Dim string0 As String = "C:"
' Each of the following three strings violates the rule.
Dim string1 As String = "\Documents and Settings"
Dim string2 As String = "\All Users"
Dim string3 As String = "\Application Data"
Console.WriteLine(string0 & string1 & string2 & string3)
' The following statement satisfies the rule.
Console.WriteLine(Environment.GetFolderPath( _
Environment.SpecialFolder.CommonApplicationData))
End Sub
End Class
End Namespace
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));
}
}
}
Règles connexes
CA1303 : Ne pas transmettre des littéraux en tant que paramètres localisés