Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ';抑制消息';对于整个名称空间_C#_.net_Namespaces_Code Analysis_Fxcop - Fatal编程技术网

C# ';抑制消息';对于整个名称空间

C# ';抑制消息';对于整个名称空间,c#,.net,namespaces,code-analysis,fxcop,C#,.net,Namespaces,Code Analysis,Fxcop,为了更好的可读性,我在测试方法中使用下划线,并且我希望对整个测试名称空间抑制FxCop错误/警告 我怎样才能做到这一点?我玩了GlobalSuppressions.cs,但没有任何效果: [module: System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores", Scope = "namespace",

为了更好的可读性,我在测试方法中使用下划线,并且我希望对整个测试名称空间抑制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")]

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

是的,这在FxCop中是不可能的。正如已经说过的,这是不可能的。嗯,这是因为压制必须统一进行

通过
FXCop 10
使用
Copy As>Module level SuppressMessage
功能,可以手动执行此操作

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

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


    自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")]
    
    范围-正在抑制警告的目标。如果未指定目标,则将其设置为属性的目标。支持的作用域包括:

    • 名称空间和子体
      -(Visual Studio 2019新增)此作用域抑制名称空间及其所有子体符号中的警告。
      namespaceandspondents
      值仅对Roslyn分析器有效,并被基于FxCop的二进制静态分析忽略

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

    用法示例:

    [程序集:System.Diagnostics.CodeAnalysis.SuppressMessage(
    “Microsoft.Naming”、“CA1707:标识符不应包含下划线”,
    Justification=“测试方法需要下划线以确保可读性。”
    Scope=“module”)]
    
    我通过使用包含以下规则的.editorconfig文件,成功地忽略了专门针对测试项目的特定警告(我遵循一种命名约定,其中这些项目总是以“Tests.cs”结尾):

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

    关于我的答案的更多信息

    +1同上。。。我在AssemblyInfo.cs文件中尝试了类似的方法,但也不起作用。可能CA1707不能针对整个库或命名空间,而只能针对成员本身。是否可以将其应用于整个解决方案?根据预览2,该解决方案变得可用。这很有效我尝试过,在名称空间和子体上。我实际上在官方文档中添加了这一点:注意,您应该在目标中添加~N:,作为前缀,以避免性能问题。参考:示例:[程序集:System.Diagnostics.CodeAnalysis.SuppressMessage(“Microsoft.Naming”,“CA1707:IdentifiersShouldNotContainUnderlines”,justionment=“测试方法需要下划线以确保可读性。”Scope=“NamespaceandDescents”,Target=“~N:Company.Product.Tests”)]