整个名称空间的“ SuppressMessage”

为了提高可读性,我在测试方法中使用了下划线,并且希望在整个测试名称空间中禁止显示 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")]
28314 次浏览

我认为这是不可能的,因为哈拉姆357已经说过。

是的,FxCop < = 10.0不可能做到这一点。

您可以做的是使用自定义规则文件禁用 CA1707(可能只针对您的测试项目)。

如前所述,这是不可能的盒子。因为压制必须单独进行。

通过使用 Copy As > Module-level SuppressMessage功能的 FXCop 10手动完成这项工作有一个解决方案。

缺点是,每次修改名称空间时都必须重复此操作,但是正如前面所说的,全局抑制应该是隔离的。

  1. 在 FXCop10(这里是 System.Xml)中打开程序集并运行分析
  2. 选择您的名称空间(这里是 System.Xml)
  3. 选择所有违反的规则
  4. 右键单击 Copy As > Module-level SupressMessage
  5. 然后将其粘贴到 GlobalSuppressions.cs中,例如

注意: 这可以在程序集、命名空间或类型级别进行。

Module-level SuppressMessage

自 VisualStudio2019以来,可以取消命名空间及其所有后代符号的代码分析警告:

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(
"Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores",
Justification = "Test methods require underscores for readability."
Scope = "namespaceanddescendants", Target = "Company.Product.Tests")]

作用域 -禁止发出警告的目标。如果未指定目标,则将其设置为属性的目标。支持的范围包括:

  • ...

  • namespaceanddescendants-(VisualStudio2019新增)此范围抑制命名空间及其所有后代符号中的警告。namespaceanddescendants值仅对 Roslyn 分析器有效,并且被基于 FxCop 的二进制静态分析忽略。

取消代码分析警告 # SuppressMessage 属性@MS Docs

您可以为此使用“模块”作用域,与支持较新的“名称空间和后代”作用域的编译器相比,较老的编译器支持该作用域。模块范围影响项目中的所有内容,并且不需要目标规范。

示例用法:

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(
"Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores",
Justification = "Test methods require underscores for readability."
Scope = "module")]

我已经设法忽略了对于测试项目的特定警告(我遵循的变数命名原则是这些项目总是以“ Tests.cs”结束) ,方法是使用。Edorconfig 文件,包含以下规则:

[*Tests.cs]
dotnet_diagnostics.CA1707.severity = none

关于我的答案的更多信息