如何禁用整个类的特定代码分析警告

17

我想要禁用整个类的代码分析规则,但不是整个项目,只是单个类。在下面的示例中,构建会生成CA1822警告,因为它认为单元测试方法应该是静态的。

解决办法是向每个单元测试方法添加以下属性:[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic")]

但是,这很麻烦,并且会使一个有很多单元测试的类变得混乱。

我尝试过:

  1. 将属性移到类上
  2. 将所有方法包装在 #pragma warning disable CA1822#pragma warning restore CA1822

这两种方法都没有起作用。

public class TestClass
{
    public TestClass()
    {
        // some setup here
    }

    [Fact]
    public void My_Unit_Test1()
    {
        // the 'this' parameter is never used, causes CA warning 1822
    }

    [Fact]
    public void My_Unit_Test2()
    {
        // the 'this' parameter is never used, causes CA warning 1822
    }
}

使用VS2015 Update 2、.net 4.61和新的代码分析分析器。


我通过为单元测试项目使用不同的代码分析规则集来解决了这个问题(以及其他问题)。我关闭了不适用于单元测试项目的规则。 - Matthew Watson
@MatthewWatson - 我用不同的规则集来测试项目。在这种情况下,我希望规则适用于我的单元测试项目,而不仅仅适用于一个特定的类。 - Suraj
很遗憾,您无法这样做——抑制必须始终适用于报告警告/错误的级别,因此如果是方法级别,您只能在该方法中抑制警告。 - Matthew Watson
@MatthewWatson - дҪ зҹҘйҒ“дёәд»Җд№Ҳ#pragmaзҡ„и§ЈеҶіж–№жЎҲйҖӮз”ЁдәҺStylecopдҪҶдёҚйҖӮз”ЁдәҺд»Јз ҒеҲҶжһҗеҗ—пјҹ - Suraj
恐怕不是。可能只是不同而已。 - Matthew Watson
3个回答

3

在错误列表选项卡下右键单击错误,您可以选择“在源代码中”和“在抑制文件中”。

如果选择“在源代码中”,将向源代码(方法或类级别)添加SuppressMessageAttibute。

如果选择“在抑制文件中”,则将添加“[assembly:SuppressMessage]”到GlobalSupressions.cs文件,并且您可以配置属性的“Target”。

此处有快照


3
很遗憾,错误列表中并非所有的消息/警告/错误都可以被抑制。显然,“抑制 > 在源代码/全局抑制中”菜单只适用于IntelliSense来源的消息/警告/错误,而不是编译时的消息/警告/错误。 - Dai

3

点击灯泡图标[]或按Ctrl + .组合键。这会打开一个如下所示的上下文菜单。

suppression

然后选择Suppress or Configure issues > Suppress XXX > in Suppression File菜单项。如果文件不存在,它将创建GlobalSuppression.cs文件并向其添加一行新内容。

默认情况下,它只会抑制所选成员(方法)的警告。您可以将 Scope更改为type,将Target更改为完整类名(例如:Project.Domain.MyAwesomeClass)。

这是一个例子:

[assembly: SuppressMessage("Design", "CA1062:Validate arguments of public methods", Justification = "This parameter of extension methods are always not null.", Scope = "type", Target = "Fonibo.Identity.Extensions.ClaimsIdentityExtension")]

1
这不完全是你想要的,但可能比你现在的情况更好一些。你可以使用以下属性告诉代码分析忽略特定的类:
[System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]

请注意,您的项目需要勾选Visual Studio选项“抑制生成代码结果(仅托管)”。
虽然有些烦人,但是如果您暂时注释属性,仍可以选择在文件上运行代码分析。

4
ExcludeFromCodeCoverage 表示该代码不应包含在代码覆盖率信息中,但不会从代码分析中排除。请参阅 MSDN 文档 (https://msdn.microsoft.com/zh-cn/library/system.diagnostics.codeanalysis.excludefromcodecoverageattribute(v=vs.110).aspx)。 - Ɖiamond ǤeezeƦ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接