我有一个类似这样的课程:
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;
}
但是这段代码不起作用,我仍然得到代码分析警告。 我怎么能正确地做到这一点?
答案 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>
查看分步演练: