StyleCop/FxCop 10 - 如何仅在命名空间级别上正确抑制消息?

mic*_*ael 11 c# fxcop namespaces stylecop suppressmessage

FxCop 10抱怨以下内容:

using XYZ.Blah; //CA1709 - "XYZ"
using Xyz.Blah; //No complaint.

using XylophoneSuperDuperLongFullName.Blah; //I don't want to have a long full name for my company name.
Run Code Online (Sandbox Code Playgroud)

问题是......我希望我的公司名称显示在所有大写字母中,因为XYZ是缩写.该名称的长版本太长,无法成为有用的命名空间.微软逃脱了这种东西,因为他们的首字母缩写只有两个字母.

using MS.Something; //No Complaint.
using Microsoft.SomethingElse; //No Complaint.
Run Code Online (Sandbox Code Playgroud)

所以,我正在考虑添加一个SuppressMessageAttribute来抑制此警告.但是,我不确定如何恰当地这样做(或者甚至在哪里坚持它),以便它只影响这一个实例.我不想在该命名空间中抑制任何内容,因为我想抓住我犯的任何其他错误.我确实看过msdn和谷歌搜索但我找不到任何显示如何专门针对这个实例.我发现最接近的是Scope ="namespace",但我不确定这是否意味着它会影响实际的命名空间名称,或者它是否会影响该命名空间中的所有内容.

m-y*_*m-y 15

MSDN - CA1709:标识符应正确装入:

如果您有自己的命名约定,或者标识符代表正确的名称(例如,公司名称或技术),则可以安全地禁止此警告.

您还可以向代码分析自定义词典添加特定术语,缩写和首字母缩略词.自定义词典中指定的术语不会导致违反此规则.有关更多信息,请参见如何:自定义代码分析字典.


话虽这么说,如果你觉得有理由压制这个消息,那真的并不难.在FxCop 10中,右键单击要抑制的任何消息,然后转到"复制为">"抑制消息"或"复制为">"模块级抑制消息".

您应该将SuppressMessageAttributes放在适当的位置.抑制单个位置的属性应放在该位置,例如,方法,字段,属性或类之上.

在您的实例中,没有特定的位置来放置属性(默认情况下它应该复制为[module: SuppressMessage(...)].这是一个很好的指示,如果它是特定于模块级别的模块,它属于文件的顶部)文件(例如,特定于文件的资源).或者,更有可能的是,它属于GlobalSuppressions.cs文件.

using System.Diagnostics.CodeAnalysis;

[module: SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", Justification = "Because I said so!", MessageId = "XYZ", Scope = "namespace", Target = "XYZ.Blah")]
Run Code Online (Sandbox Code Playgroud)

CheckId如果你愿意,你也可以缩短房产,但很高兴知道CA1709的含义.如果你不喜欢它,这也有效:

using System.Diagnostics.CodeAnalysis;

[module: SuppressMessage("Microsoft.Naming", "CA1709", Justification = "Because I said so!", MessageId = "XYZ", Scope = "namespace", Target = "XYZ.Blah")]
Run Code Online (Sandbox Code Playgroud)

最后......除非你在你的构建中包含'CODE_ANALYSIS'符号,否则所有这些都将毫无结果.转到"属性">"构建",然后添加条件编译符号.

  • +1.它们的关键在于我在其他任何FxCop文档中都没有注意到的是`CODE_ANALYSIS`符号.我不知道必须在VisualStudio中添加,并且无法弄清楚为什么FxCop不会忽略任何东西! (3认同)

Jon*_*eet 5

.NET 命名约定中,首字母缩略词并不意味着全部大写。例如HttpResponse等。

大写约定

首字母缩略词的大小写取决于首字母缩略词的长度。所有首字母缩略词的长度至少为两个字符。就这些准则而言,如果首字母缩略词正好是两个字符,则将其视为短首字母缩略词。三个或更多字符的首字母缩略词是一个长首字母缩略词。

以下指南指定了短首字母缩略词和长首字母缩略词的正确大小写。标识符大小写规则优先于首字母缩写词大小写规则。

除了驼峰式标识符的第一个单词外,双字符首字母缩略词的两个字符都要大写。

名为 DBRate 的属性是用作 Pascal-cased 标识符的第一个单词的短首字母缩略词 (DB) 的示例。名为 ioChannel 的参数是用作驼峰式标识符的第一个单词的短首字母缩略词 (IO) 的示例。

除了驼峰式标识符的第一个单词外,请仅将具有三个或更多字符的首字母缩略词的第一个字符大写。

名为 XmlWriter 的类是用作 Pascal 大小写标识符的第一个单词的长首字母缩略词的示例。名为 htmlReader 的参数是用作驼峰式标识符的第一个单词的长首字母缩略词的示例。