如何抑制所有类型成员的代码分析消息?

假设我列举了所有货币:

public enum CurrencyType { ///  /// United Arab Emirates dirham ///  [EnumMember] AED = 784, ///  /// Afghan afghani ///  [EnumMember] AFN = 971, ///  /// Albanian lek ///  [EnumMember] ALL = 008, ... } 

VS 2015代码分析一直抱怨每个成员100次违反CA1709 。

这本身就是一个有用的规则,我不想禁用它; 但在这种特定情况下,它没有多大帮助,因为CurrencyType是公共的,并且在很多其他项目中使用。

我可以压制这个消息; 但是,VS只允许我为每个成员压制它 – 这意味着我将有100个[SuppressMessage(...)]行,这将使代码混乱。

有没有办法抑制所有CurrencyType成员的所有CA1709,而不是为这个项目中的所有其他代码抑制它,而不必写100 [SuppressMessage(...)]

SuppressMessageAttribute有一个Scope参数,但文档不清楚。 我试过放两个

 [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", Scope = "type", Justification = "Currency codes are defined in ISO standard.")] 

 [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", Scope = "member", Justification = "Currency codes are defined in ISO standard.")] 

CurrencyType本身。 也没有用。

在这种情况下,无法抑制整个类或枚举的规则,并且不幸的是,抑制适用于其所有成员。

但你可以做的是创建一个CodeAnalaysisDictionary.xml ,将它添加到包含Enum的项目中,并将其“Build action”设置为CodeAnalysisDictionary

在此处输入图像描述

设置完成后,可以将缩写和大小写例外添加到字典中,如下所示:

    AED AFN ALL ...    

虽然这些exception将适用于代码中包含这些首字母缩略词的任何元素,但它们会阻止CA1709警告显示。

有关可以使用字典文件设置的例外的更多信息,请参阅文档:

不,没有个别压制就没有办法做到这一点。 Scope参数允许代码分析引擎知道Target参数代表什么样的东西。 例如,如果Target是“ABC”,那么它是指名称为ABC的命名空间还是命名空间AB名为C的类? “范围”可能更好地由像“TargetKind”这样的名称来表示,但不幸的是,它并没有改变它实际代表的内容。

鉴于此情况下抑制的丑陋,您可能希望将它们生成到GlobalSuppressions.cs ,然后将它们移动到单独的文件中,如CurrencyTypeMemberNameSuppressions.cs ,您可以(可选)将其作为文件嵌套在包含CurrencyType枚举的文件下在Visual Studio中的项目结构中。 不理想,但也许是目前糟糕的最佳选择……

另见这个答案 。