更新: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));
}
}
}