5

我有一堂像这样的课:

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

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

我想为我的类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;
}

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

4

2 回答 2

10

无法使用 SuppressMessageAttribute 一次抑制超过 1 条消息。

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

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

每次将 SuppressMessage 放入源文件中时,都会抑制一个问题(网格中的一个“行”)。时期。

SuppressMessage 可以放置在违规“附近”或模块级别。模块级、程序集级和全局抑制都是同一个意思。通过放置在模块级别,您不会一次抑制问题的多个实例。您只需在代码的不同位置找到 SuppressMessage。主要好处是,例如,您可以将与程序集相关的所有抑制收集到一个文件中(例如,GlobalSuppressions.cs)。

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

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

于 2011-08-17T12:38:35.523 回答
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>

请参阅分步演练:

于 2011-08-17T12:45:53.810 回答