我在以下方法代码中为两个异常抛出行获取了DoNotPassLiteralsAsLocalizedParameters FxCop违规行为:
public bool IsPageAccessible(string url, string documentId) {
if (url == null) {
throw new ArgumentNullException("url", @"url must not be null, use string.Empty if you don't care what the url is.");
}
if (documentId == null) {
throw new ArgumentNullException("documentId", "documentId must not be null, use string.Empty if you don't care what the documentId is.");
}
return true;
}
这意味着:
fxcop全球化#CA1303字符串 嵌入源中的文字 代码很难本地化。避免 将字符串文字作为参数传递 在本地化的情况下 字符串通常是预期的。最 本地化的应用程序,例如, 应该本地化字符串参数 传递给异常构造函数。 创建Exception实例时 因此,检索字符串参数 从字符串表更多 比字符串文字更合适。
推理:
我不希望本地化异常消息。只有英语很好。即使我们正在构建API,所有开发人员都知道英语。并且不应该在生产服务器上向访问者显示异常消息。
问题:
答案 0 :(得分:1)
我认为你的推理很好,我讨厌当我在Visual Studio中有本地化异常而无法找到帮助时,因为编程的通用语言是英语。
更一般地说,你不应该试图遵守每个fxcop规则,这很快就会成为一种负担。最好专注于一部分规则。
我认为您不能在特定例外中排除警告,但您可以使用SuppressMessage
属性排除检测:
[SuppressMessage("Microsoft.Globalization",
"CA1303:DoNotPassLiteralsAsLocalizedParameters",
Justification="Exception are not localized")]
public bool IsPageAccessible(string url, string documentId) {
if (url == null) {
throw new ArgumentNullException("url", @"url must not be null, use string.Empty if you don't care what the url is.");
}
if (documentId == null) {
throw new ArgumentNullException("documentId", "documentId must not be null, use string.Empty if you don't care what the documentId is.");
}
return true;
}
另一种方法是编写custom fxcop rule来添加此行为。