我在 Visual Studio 2017 中抑制了几条(IntelliSense)消息。我在文件
GlobalSuppressions.cs
中创建了条目,例如:
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Wrong Usage", "DisposableFixer:Undisposed ressource.", Justification = "<Pending>", Scope = "member", Target = "~M:MyProg.Class1.....Method1")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "CC0001:You should use 'var' whenever possible.", Justification = "<Pending>", Scope = "member", Target = "~P:MyProg.Class2.Setter1")]
属性
~M:
中的前缀~P:
和
Target
似乎是某种过滤器。他们的意思是什么? 我找到的关于Target
的唯一文档是:“它必须包含完全限定的项目名称。”
我终于找到了我正在寻找的文档。上面写着:
字符串的第一部分通过单个字符后跟冒号来标识正在记录的成员类型。定义了以下类型的成员:
性格 | 描述 |
---|---|
E | 活动 |
F | 田野 |
M | 方法(包括构造函数、析构函数和运算符) |
N | 命名空间 |
P | 属性(包括索引器) |
T | 类型(例如类、委托、枚举、接口和结构) |
! | 错误字符串;字符串的其余部分提供有关错误的信息。例如,文档生成器会生成无法解析的链接的错误信息。 |
我猜第一个和最后一个条目与抑制消息无关,并且前导
~
按惯例固定。
因此,例如,要抑制整个命名空间中给定类型的所有警告,您可以编写:
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "CC0001:You should use 'var' whenever possible.", Scope = "namespaceanddescendants", Target = "~P:MyProg.Class2.Setter1")]
顺便说一句,
Scope
的允许值在here有描述:
价值 | 描述 |
---|---|
“会员” | 禁止对会员发出警告。 |
“模块” | 抑制针对程序集的警告。这是适用于整个项目的全局抑制。 |
“命名空间” | 此范围会抑制针对命名空间本身的警告。它不会抑制针对命名空间内的类型的警告。 |
“命名空间和后代” | 抑制命名空间及其所有后代符号中的警告。遗留代码分析会忽略该值。 |
“类型” | 抑制针对某种类型的警告。 |