【问题标题】:'SuppressMessage' for a whole namespace整个命名空间的“SuppressMessage”
【发布时间】:2012-07-06 18:17:13
【问题描述】:

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

【问题讨论】:

  • +1 同上...我在 AssemblyInfo.cs 文件中尝试了类似的方法,但它也不起作用。也许 CA1707 不能针对整个库或命名空间,而只能针对成员本身。
  • 是否可以将其应用于整个解决方案?

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


【解决方案1】:

自 Visual Studio 2019 起,可以抑制命名空间及其所有后代符号的代码分析警告:

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

范围 - 正在抑制警告的目标。如果未指定目标,则将其设置为属性的目标。支持的范围包括:

  • ...

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

Suppress code analysis warnings#SuppressMessage attribute @ MS Docs

【讨论】:

  • 请注意,您应该添加 ~N: 作为目标的前缀以避免性能问题。参考:docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/… 示例:[程序集:System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores", Justification = "测试方法需要下划线以提高可读性。" Scope = "namespaceanddescendants", Target = " ~N:Company.Product.Tests")]
【解决方案2】:

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

示例用法:

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

【讨论】:

【解决方案3】:

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

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

关于我的回答here的更多信息

【讨论】:

    【解决方案4】:

    是的,这在 FxCop

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

    【讨论】:

      【解决方案5】:

      如前所述,开箱即用是不可能的。恕我直言,这是因为压制必须统一进行。

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

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

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

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

      【讨论】:

        【解决方案6】:

        我认为这是不可能的,正如 harlam357 已经说过的那样。

        最近更新 更多