Visual Studio:GlobalSuppressions.cs:前缀〜P:用于SuppressMessage中的属性Target

Jac*_*ler 5 c# suppress-warnings visual-studio

我在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")]
Run Code Online (Sandbox Code Playgroud)

前缀~M:~P:in属性Target似乎是某种过滤器。他们的意思是什么?我发现的唯一文档Target是:“它必须包含标准的项目名称。”

Jac*_*ler 19

我终于找到了我正在寻找的文档。上面写着:

字符串的第一部分通过单个字符后跟冒号来标识正在记录的成员的类型。定义了以下类型的成员:

特点 描述
事件
F 场地
中号 方法(包括构造函数、析构函数和运算符)
命名空间
属性(包括索引器)
时间 类型(例如类、委托、枚举、接口和结构)
错误字符串;字符串的其余部分提供有关错误的信息。例如,文档生成器会为无法解析的链接生成错误信息。

我猜第一个和最后一个条目与抑制消息无关,并且前导~是按惯例固定的。

因此,例如,要抑制整个命名空间中给定类型的所有警告,您可以编写:

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "CC0001:You should use 'var' whenever possible.", Scope = "namespaceanddescendants", Target = "~P:MyProg.Class2.Setter1")]
Run Code Online (Sandbox Code Playgroud)

顺便说一句,允许的值如下Scope所述:

价值 描述
“成员” 禁止对成员发出警告。
“模块” 抑制针对程序集的警告。这是适用于整个项目的全局抑制。
“命名空间” 此范围会抑制针对命名空间本身的警告。它不会抑制针对命名空间内的类型的警告。
“命名空间和后代” 禁止命名空间及其所有后代符号中的警告。遗留代码分析会忽略该值。
“类型” 抑制针对某种类型的警告。