Udostępnij za pośrednictwem


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