CA1302: Czy nie zakodować ciągi określonych ustawień regionalnych
TypeName |
DoNotHardcodeLocaleSpecificStrings |
CheckId |
CA1302 |
Kategoria |
Microsoft.Globalization |
Zmiana kluczowa |
Niekluczowa |
Przyczyna
Metoda używa literału ciąg, który reprezentuje część ścieżki niektórych folderów systemowych.
Opis reguły
Wyliczenie System.Environment.SpecialFolder zawiera elementy, które odwołują się do folderów specjalnych systemu.Lokalizacje tych folderów mogą mieć różne wartości w różnych systemach operacyjnych, użytkownik może zmienić niektóre z tych lokalizacji, lokalizacje są zlokalizowane.Przykładem folderu specjalnego jest folder systemu "C:\WINDOWS\system32" dla Windows XP , ale "C:\WINNT\system32" dla Windows 2000.Metoda Environment.GetFolderPath zwraca lokalizacje, które są skojarzone z wyliczeniem Environment.SpecialFolder.Lokalizacje, które są zwracane przez GetFolderPath są lokalizowane i stosowne do uruchomionego komputera.
Ta reguła dzieli ścieżkę folderu na tokeny, które są pobierane przy użyciu metody GetFolderPath na oddzielne poziomy katalogów.Każdy literał będący ciągiem znaków jest przyrównywany do tokenów.Jeśli dopasowanie zostanie znalezione, zakłada się, że metoda tworzy ciąg, który odnosi się do lokalizacji w systemie skojarzonej z tokenem.Aby uzyskać przenośność i możliwość lokalizacji należy wykorzystać metodę GetFolderPath do pobrania lokalizacji folderów specjalnych systemu zamiast używania literałów ciągów znaków.
Jak naprawić naruszenia
Aby naprawić naruszenie tej zasady, należy pobrać lokalizację za pomocą metody GetFolderPath.
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć ostrzeżenie dla tej reguły, jeśli literał ciągu znaków nie jest używany do odwoływania się do lokalizacji systemu, która jest skojarzona z wyliczeniem Environment.SpecialFolder.
Przykład
Poniższy przykład tworzy ścieżkę w folderze wspólnych danych aplikacji, która generuje ostrzeżenia trzy od tej reguły.Następnie w przykładzie pobierana jest ścieżka za pomocą 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));
}
}
}
Powiązane reguły
CA1303: Nie przechodzą literały jako parametry zlokalizowane