CA2204警告提及字符串文字中的类型名称
考虑下面的C#代码:
if (atr == null) throw new InvalidOperationException("No ContentProperty attribute found on type.");
在构建项目时,由于无法识别单词“ContentProperty”,发出“ CA2204
:文字应拼写正确”警告。
我知道我可以禁用规则(全局或仅包含方法)或创建自定义代码分析字典并在其中添加“ContentProperty”作为识别的单词。 然而,这些解决方案都没有吸引我。 在我的项目中引用异常消息中的类型或类成员名称,这是一个应用程序框架。
代码分析是否有办法说明一个单词/一组单词不是要拼写检查的 ,就像被引号或其他东西包围一样? 或者是禁用警告唯一的方法呢?
本文介绍如何为代码分析创建自定义词典:http://msdn.microsoft.com/en-us/library/bb514188.aspx
创建一个名为CustomDictionary.xml的文件并将其添加到您的项目中。 将该文件的Build Action属性设置为CodeAnalysisDictionary
该文件的内容应该如下所示:
<Dictionary>
<Words>
<Recognized>
<Word>ContentProperty</Word>
</Recognized>
</Words>
</Dictionary>
正如Willy's Apprentice博士在下面的评论中所建议的那样,根据框架的体系结构动态生成字典可能是一个好主意。
我会使用不同的方法 - 因为维护自定义字典可能会成为一个维护问题:没有链接到实际的类(在您的示例中是ContentPropertyAttribute
)。 如果有人重命名或删除该类,会发生什么情况? 自定义属性中的条目必须手动同步,这很容易出错。
相反,我建议使用一些(敢说我)反射来注入字符串的相应部分(而不是可能以CA1703结束的资源)。 您的示例可能会被重写为:
throw new InvalidOperationException(string.Format("No {0} found on type.", typeof(ContentPropertyAttribute).Name);
现在,您甚至可以在编译时安全地处理消息。
代码分析是否有办法说明一个单词不是要拼写检查的, 就像被引号或其他东西包围一样 ?
CA2204仅适用于字符串文字,即硬编码的字符串(用引号括起来)。 禁用此代码分析规则不会阻止CA检查类名称,公共成员或其他代码属性上的拼写。
如果你的项目是一个应用程序框架,大多数/所有的字符串文字都将针对开发者(比如异常消息),我建议禁用这个规则。 对我来说,这比想出排除异常消息中每个无法识别的字符串的复杂方法更有意义。
另一种选择是将“拼写错误”的字符串移动到Resource.resx
文件中。 但是,如果启用CA1703,则会遇到同样的问题。
上一篇: CA2204 warning for mentioning type name in string literal
下一篇: Is it possible to merge or use multiple code analysis dictionary files?