我应该压制CA2204:文字应拼写正确吗?

时间:2010-05-18 14:32:22

标签: visual-studio-2010 code-analysis fxcop conventions

我最近将我的项目从Visual Studio 2008升级到Visual Studio 2010。

通过启用代码分析,我收到了很多警告,导致规则CA2204:文字应拼写正确。

修改

假设我有一个名为GetResult()的方法,其中我想出于某种原因抛出异常。我希望例外说"GetResult() has failed for some reason"。这将给我警告,因为GetResult不是一个字。我不会在方法名称GetResult()上收到警告,只有当我把它放在一个字符串中时。这是因为Get和Result是合法的词。

我不相信写GetResult() has failed for some reason是解决方案。

编辑:在MSDN中说:

  

此规则解析文字字符串   单词,标记复合词,   并检查每个的拼写   字/令牌。

这是否意味着应该将GetResult检查为两个词:“获取”和“结果”?

我应该抑制CA2204吗?

4 个答案:

答案 0 :(得分:5)

"Can't initialize MyClass"对于开发人员引入代码不是一个好消息。它很少有助于调试,它只会在最终用户显示时混淆。

一般情况下,我会说不要压制邮件,因为拼写错误让人看起来比实际上要笨重,而且这不是你想用你的应用传达的信息。

在这个特定的实例中,它实际上是一个错误消息错误的警告 - 要么告诉用户如何纠正它,自动纠正它,要么包括它没有初始化的实际原因你的错误日志。

编辑:包括OP的编辑 您可以从此警告中获取的一点是,您不应将错误消息中的代码详细信息泄露(主要是因为在您记录异常时它们将包含在调用堆栈中)。

GetResult() has failed for some reason
让我们说“某些原因”是权限。消息可以是:

  

您无权查看这些结果。

无需提及失败的特定方法,因为可以自动记录堆栈跟踪。

答案 1 :(得分:4)

解决此问题的一种方法是不直接在字符串中添加类型名称。而是将其作为参数传递。例如

var msg = String.Format("Can't initialize {0}", typeof(MyClass).Name);

这有利于绕过FxCop规则并且可以安全地进行重构。

答案 2 :(得分:2)

可能你不应该把类名放入文字中吗?如何使用或定义可抛出的异常:

throw new CantInitializeClassException(innerException, typeof(MyClass);

我的想法是将更多信息转移到更一般的例外。我建议使用上面的示例而不是throw new ApplicationException("Cant initialize MyClass");

答案 3 :(得分:1)

CA2204就是拼写。不幸的是,即使在VS2012中,它仍然有一个古怪的错误,它无法标记复合词:http://connect.microsoft.com/visualstudio/feedback/details/521030

这导致我在代码分析规则集中关闭此规则。