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

时间:2015-09-02 15:19:18

标签: c# .net code-analysis roslyn fxcop

假设我列举了所有货币:

public enum CurrencyType
{
    /// <summary>
    /// United Arab Emirates dirham
    /// </summary>
    [EnumMember]
    AED = 784,

    /// <summary>
    /// Afghan afghani
    /// </summary>
    [EnumMember]
    AFN = 971,

    /// <summary>
    /// Albanian lek
    /// </summary>
    [EnumMember]
    ALL = 008,

    ...
}

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

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

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

是否有办法取消所有CurrencyType成员的所有CA1709,而不是为此项目中的所有其他代码禁止它,而不必写入100 [SuppressMessage(...)]

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

[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本身。也没有用。

3 个答案:

答案 0 :(得分:8)

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

但是您可以做的是创建一个CodeAnalaysisDictionary.xml,将其添加到包含Enum的项目中并设置其“构建”操作&#39;适合CodeAnalysisDictionary

enter image description here

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

<Dictionary>
      <Acronyms>
         <CasingExceptions>
            <Acronym>AED</Acronym>
            <Acronym>AFN</Acronym>
            <Acronym>ALL</Acronym>
            <Acronym>...</Acronym>
         </CasingExceptions>
      </Acronyms>
</Dictionary>

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

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

答案 1 :(得分:5)

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

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

另见this answer

答案 2 :(得分:1)

#pragma warning disable CA1709呢? 要重新激活,您可以使用#pragma warning restore CA1709,但是如果此枚举是文件中唯一的一种类型,则可以将其省略。