VS2010代码分析.为所有类成员抑制消息CA1051:DoNotDeclareVisibleInstanceFields

feo*_*rex 5 code-analysis fxcop visual-studio-2010 visual-studio suppressmessage

我有一个像这样的课:

public class Foo
{
    public readonly int A = 1;
    public readonly int B = 2;
}
Run Code Online (Sandbox Code Playgroud)

当我运行内置代码分析工具的VS2010时,我得到两个相同的警告:" 字段"......在其声明类型之外可见,将其可访问性更改为私有并添加属性,具有与字段相同的可访问性目前,提供访问权限 '.

我想为我的类Foo中的所有字段禁止此警告,但我不想用SuppressMessage属性标记每个字段,如下所示:

public class Foo
{
    [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
    public readonly int A = 1;
    [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
    public readonly int B = 2;
}
Run Code Online (Sandbox Code Playgroud)

我想标记所有类成员,使用如下代码:

[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
public class Foo
{
    public readonly int A = 1;
    public readonly int B = 2;
}
Run Code Online (Sandbox Code Playgroud)

但是这段代码不起作用,我仍然得到代码分析警告.我该怎么做才能正确?

Cod*_*ked 10

使用SuppressMessageAttribute无法一次抑制多条消息.

正如讨论可以在这里找到,但相关部分是:

您遇到了关于SuppressMessage的常见误解.

每次将SuppressMessage放在源文件中时,都可以完全抑制一个问题(网格中有一个"行").期.

SuppressMessage可以放置在"违规"附近或模块级别.模块级,汇编级和全局抑制都意味着相同的事情.通过放置在模块级别,您不会立即抑制问题的多个实例.您只需在代码的不同位置找到SuppressMessage.例如,您可以在单个文件中收集与程序集相关的所有抑制(例如,GlobalSuppressions.cs).

使用模块级SuppressMessage时,必须指定目标.目标必须完全匹配GUI中报告的违反规则的内容.

无法使用SuppressMessage来抑制类的整个范围或命名空间的整个范围的规则.