整个命名空间的'SuppressMessage'

时间:2012-07-06 09:37:04

标签: c# .net namespaces code-analysis fxcop

我为我的测试方法使用下划线以获得更好的可读性,我想要为整个测试命名空间抑制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)]

6 个答案:

答案 0 :(得分:20)

您可以为此使用“模块”作用域,与支持较新的“ namespaceanddescendants”作用域的编译器相比,较早的编译器支持。模块作用域会影响项目中的所有内容,并且不需要目标规范。

示例用法:

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

答案 1 :(得分:3)

我认为这是不可能的,因为harlam357已经说过。

答案 2 :(得分:3)

是的,FxCop< = 10.0是不可能的。

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

答案 3 :(得分:3)

通过包含以下规则的.editorconfig文件,我设法忽略了专门针对测试项目的特定警告(我遵循的命名约定始终以“ Tests.cs”结尾)。

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

有关我的答案here

的更多信息

答案 4 :(得分:2)

如前所述,开箱即用是不可能的。 Imho,它的目的是因为压制必须一起完成。

有一种解决方法可以通过具有FXCop 10功能的Copy As > Module-level SuppressMessage手动执行此操作。

缺点,每次修改命名空间时都必须重复此操作,但正如已经说过的那样,应该隔离全局抑制。

  1. 在FXCop 10中打开您的程序集( System.Xml 此处)并运行分析
  2. 选择您的命名空间( System.Xml 此处)
  3. 选择所有违规规则
  4. 右键点击Copy As > Module-level SupressMessage
  5. 然后将其粘贴到GlobalSuppressions.cs例如
  6. 注意:这可以在程序集,命名空间或类型级别完成。

    Module-level SuppressMessage

答案 5 :(得分:0)

Visual Studio 2019现在可以实现

namespaceanddescendants

Scope = "namespaceanddescendants"