更新:2007 年 11 月
| TypeName | DoNotHardcodeLocaleSpecificStrings | 
| CheckId | CA1302 | 
| 类别 | Microsoft.Globalization | 
| 是否重大更改 | 否 | 
原因
方法使用字符串表示特定系统文件夹路径的一部分。
规则说明
System.Environment.SpecialFolder 枚举包含表示特殊系统文件夹的成员。对于不同的操作系统,这些文件夹的位置可能具有不同的值,用户也可能会更改某些位置,或者这些位置已经进行了本地化。例如,System 文件夹就是一个特殊文件夹,该文件夹在 Windows XP 中为“C:\WINDOWS\system32”,而在 Windows 2000 中为“C:\WINNT\system32”。Environment.GetFolderPath 方法可以返回与 Environment.SpecialFolder 枚举关联的位置。GetFolderPath 返回的位置已进行了本地化,以便与目前运行的计算机相适应。
该规则将使用 GetFolderPath 方法检索的文件夹路径标记到不同的目录级别。将每一个字符串与这些标记进行比较,如果找到匹配项,则假定该方法正在生成一个与该标记关联的表示系统位置的字符串。为了确保可移植性和可本地化性,请使用 GetFolderPath 方法来检索特殊文件夹的位置,而不要使用字符串。
如何修复冲突
要修复与该规则的冲突,请使用 GetFolderPath 方法检索位置。
何时禁止显示警告
如果字符串不用于表示与 Environment.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));
      }
   }
}