Поделиться через


CA1302: не следует жестко кодировать строки, зависящие от языка

TypeName

DoNotHardcodeLocaleSpecificStrings

CheckId

CA1302

Категория

Microsoft.Globalization

Критическое изменение

Не критическое

Причина

Метод использует строковый литерал, представляющий часть пути к некоторым системным папкам.

Описание правила

Перечисление SpecialFolder содержит члены, ссылающиеся на определенные системные папки.Расположение этих папок может различаться в разных ОС, пользователь может менять расположение этих папок, их имена могут быть локализованы.Примером специальной папки является системная папка; это папка "C:\WINDOWS\system32" в Windows XP или папка "C:\WINNT\system32" в Windows 2000.Метод Environment.GetFolderPath возвращает расположения, связанные с перечислением SpecialFolder.Расположения, возвращенные методом GetFolderPath, локализованы и соответствуют компьютеру, на котором в данный момент выполняется программа.

Это правило разделяет пути к папкам, извлеченные с помощью метода GetFolderPath, на отдельные уровни каталогов.Каждый строковый литерал сравнивается с маркерами.При совпадении предполагается, что метод создает строку, ссылающуюся на системное расположение, связанное с маркером.В целях обеспечения переносимости программ и возможности их локализации используйте метод GetFolderPath для извлечения расположений системных папок вместо использования строковых литералов.

Устранение нарушений

Чтобы устранить нарушение данного правила, извлеките расположение с помощью метода GetFolderPath.

Отключение предупреждений

Можно безопасно отключать предупреждения этого правила, если строковый литерал не используется для ссылки на одну из системных папок, связанных с перечислением SpecialFolder.

Пример

В следующем примере строится путь к общей папке приложений, и правило выдает три предупреждения.Затем программа извлекает путь с помощью метода 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));
      }
   }
}

Связанные правила

CA1303: не следует передавать литералы в виде локализованных параметров