CA1302: Nekódujte pevně řetězce závislé na národním prostředí
TypeName |
DoNotHardcodeLocaleSpecificStrings |
CheckId |
CA1302 |
Kategorie |
Microsoft.Globalization |
Narušující změna |
Nenarušující |
Příčina
Metoda použije řetězcový literál představující část cesty některých systémových složek.
Popis pravidla
Výčet SpecialFolder obsahuje členy, které odkazují na speciální systémové složky.Umístění těchto složek mohou mít různé hodnoty v různých operačních systémech, uživatel může změnit některé z míst a místa jsou lokalizována.Příklad speciální složky je systémové složka, jako je "C:\WINDOWS\system32" na Windows XP, ale "C:\WINNT\system32" na Windows 2000.Metoda Environment.GetFolderPath vrací umístění, která jsou přidruženy k výčtu SpecialFolder.Umístění, která jsou vrácena GetFolderPath jsou lokalizována a vhodná pro aktuálně spuštěný počítač.
Toto pravidlo rozdělí cesty ke složkám, které jsou načteny pomocí metody GetFolderPath do samostatných adresářových úrovní.Každý řetězcový literál je porovnána s tokeny.Pokud je nalezena shoda, předpokládá se, že metoda vytváří řetězec, který odkazuje na systémové umístění, které souvisí s tokenem.Pro přenosnost a lokalizovatelnost použijte metodu GetFolderPath pro načtení umístění speciálních systémových složek namísto použití řetězcových literálů.
Jak vyřešit porušení
Pro vyřešení porušení tohoto pravidla je zapotřebí načíst umístění pomocí metody GetFolderPath.
Kdy potlačit upozornění
Je bezpečné potlačit upozornění od tohoto pravidla, pokud není řetězcový literál použit jako odkaz na systémová umístění, která jsou přidružena k enumeraci SpecialFolder.
Příklad
Následující příklad vytvoří cestu datové složce běžné aplikace, která z tohoto pravidla vygeneruje tři varování.V dalším kroku načte příklad cestu použitím metody 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));
}
}
}