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

时间:2011-08-17 12:29:04

标签: visual-studio visual-studio-2010 code-analysis fxcop suppressmessage

我有一个类似这样的课程:

public class Foo
{
    public readonly int A = 1;
    public readonly int B = 2;
}

当我运行内置代码分析工具的VS2010时,我得到 2 相同的警告: ' field'...'在其声明类型之外可见,将其可访问性更改为private并添加一个属性,具有与当前字段相同的可访问性,以提供对它的访问'。

我想对我的班级 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;
}

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

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

但是这段代码不起作用,我仍然得到代码分析警告。 我怎么能正确地做到这一点?

2 个答案:

答案 0 :(得分:10)

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

可以找到here的讨论,但相关部分是:

  

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

     

每次将SuppressMessage放入源文件时,都会禁止   恰好有一个问题(网格中有一个“行”)。周期。

     

SuppressMessage可以放置在“违规”附近或在   模块级。模块级,汇编级和全局抑制   一切都意味着同样的事情。通过放置在模块级别,您不会   立即抑制问题的多个实例。你只是去   将SuppressMessage定位在代码的不同位置。主要的   好处是,你可以,例如,收集所有的抑制   与单个文件中的程序集相关(例如,   GlobalSuppressions.cs)。

     

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

     

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

答案 1 :(得分:1)

您可以使用一组规则创建CodeAnalysis规则文件,例如:

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="New Rule Set" Description=" " ToolsVersion="10.0">
  <Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis"
         RuleNamespace="Microsoft.Rules.Managed">
    <Rule Id="CA1111" Action="Ignore" />
  </Rules>
</RuleSet>

查看分步演练: