我在测试方法中使用下划线以获得更好的可读性,并且我想抑制整个测试命名空间的 FxCop 错误/警告。
我怎样才能实现这个目标?我玩了
GlobalSuppressions.cs
但没有任何效果:
[module: System.Diagnostics.CodeAnalysis.SuppressMessage(
"Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores",
Scope = "namespace", Target = "Company.Product.Tests")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(
"Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores",
Scope = "namespace", Target = "Company.Product.Tests")]
自 Visual Studio 2019 起,可以抑制命名空间及其所有后代符号的代码分析警告:
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(
"Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores",
Justification = "Test methods require underscores for readability."
Scope = "namespaceanddescendants", Target = "~NCompany.Product.Tests")]
Scope - 正在抑制警告的目标。如果未指定目标,则将其设置为属性的目标。支持的范围包括以下内容:
...
-(Visual Studio 2019 的新增功能)此范围会抑制命名空间及其所有后代符号中的警告。namespaceanddescendants
值仅对 Roslyn 分析器有效,并且会被基于 FxCop 的二进制静态分析忽略。namespaceanddescendants
抑制代码分析警告#SuppressMessage 属性@ MS Docs
~N
属性的Target
部分是推荐的目标格式(性能优化)
您可以为此使用“模块”作用域,较旧的编译器比支持较新的“命名空间和后代”作用域的编译器支持该作用域。模块范围影响项目中的所有内容,并且不需要目标规范。
用法示例:
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(
"Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores",
Justification = "Test methods require underscores for readability."
Scope = "module")]
<= 10.0.
您可以做的是使用自定义规则文件禁用 CA1707(也许仅适用于您的测试项目)。
有一种解决方法可以通过
FXCop 10
使用
Copy As > Module-level SuppressMessage
功能手动执行此操作。缺点,每次修改命名空间时都必须重复此操作,但正如已经说过的,应该隔离全局抑制。
Copy As > Module-level SupressMessage
GlobalSuppressions.cs
例如
注意:这可以在程序集、命名空间或类型级别完成。