11

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.

问题是...我希望我的公司名称全部大写,因为 XYZ 是缩写。名称的长版本太长而不能成为有用的命名空间。微软逃脱了这种东西,因为它们的首字母缩写词只有 2 个字母。

using MS.Something; //No Complaint.
using Microsoft.SomethingElse; //No Complaint.

所以,我正在考虑添加一个SuppressMessageAttribute来抑制这个警告。但是,我不确定如何正确地做到这一点(或者甚至将它粘贴在哪里),以便它只影响这个实例。我不想抑制该命名空间中的任何内容,因为我想捕捉我犯的任何其他错误。我确实查看了 msdn 和 google 搜索,但我找不到任何显示如何专门针对此实例的内容。我找到的最接近的是 Scope = "namespace" 但我不确定这是否意味着它会影响实际的命名空间名称,或者它是否会影响该命名空间内的所有内容。

4

3 回答 3

15

MSDN - CA1709:标识符应正确大小写

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

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


话虽如此,如果您觉得有理由压制该消息,那真的一点也不难。在 FxCop 10 中,右键单击要抑制的任何消息,然后转到 Copy As>Suppress-Message 或 Copy As>Module-level Suppress Message。

您应该将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")]

如果您愿意,您也可以缩短该CheckId属性,但最好了解 CA1709 的含义。如果你不喜欢它,这也有效:

using System.Diagnostics.CodeAnalysis;

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

最后...除非您在构建中包含“CODE_ANALYSIS”符号,否则所有这些都将徒劳无功。转到 Properties>Build 并添加条件编译符号。

于 2011-06-17T17:53:51.533 回答
6

Acryonyms 在.NET 命名约定中并不意味着全部大写。例如HttpResponse等。

大写约定

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

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

务必将双字符首字母缩写词的两个字符大写,但驼峰式标识符的第一个单词除外。

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

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

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

于 2011-06-17T14:00:16.253 回答
0

如果您通过 StyleCop 检查名称,您可以使用支持可配置缩写列表的StyleCop+(自定义规则)。

于 2011-06-19T13:45:09.260 回答