2017-09-02 83 views
1

我有开始了这样的一类:无法抑制CA1502

namespace Tools.Builders 
{ 
    internal abstract class Builder 
    { 
     [SuppressMessage("Microsoft.Maintainability", "CA1502")] 
     private static readonly Dictionary<string, Func<ILogger, Builder>> _builders = 
      new Dictionary<string, Func<ILogger, Builder>> 
     { 
      { "1", (x) => {return new BuilderType1(x);} }, 
      { "2", (x) => {return new BuilderType2(x);} }, 
      { "3", (x) => {return new BuilderType3(x);} }, 
      { "4", (x) => {return new BuilderType4(x);} }, 
      { "5", (x) => {return new BuilderType5(x);} }, 
      { "6", (x) => {return new BuilderType6(x);} }, 
      { "7", (x) => {return new BuilderType7(x);} }, 
      { "8", (x) => {return new BuilderType8(x);} }, 
      { "9", (x) => {return new BuilderType9(x);} }, 
     }; 
     protected ILogger _logger; 
     protected Builder(ILogger logger) 
     { 
      _logger = logger; 
     } 
     //... 

这将导致以下形式的CA1502警告“Builder.Builder()有一个圈复杂度...”(这是这种初始化程序已知的问题)。然而我的问题是我无法压制警告。我试着把SuppressMessageAttribute放在代码中的各种不同的地方,但它只是被忽略。任何建议任何人?

+0

[文档](https://msdn.microsoft.com/en-us/library/system.diagnostics.codeanalysis.suppressmessageattribute.suppressmessageattribute(v = vs.110).aspx):_“预处理符号”CODE_ANALYSIS “必须定义这个属性是有效的,没有预处理器符号会导致属性没有被应用。”_ – CodeCaster

+0

好吧,我试过了,但没有任何区别。不管怎么说,还是要谢谢你。 – Dave

+0

请参见[Pragma不适用于警告CA1502](https://social.msdn.microsoft.com/Forums/zh-CN/872d9c97-02b7-4409-9df7-6202ea0820dc/pragma-not-working-for-warning-ca1502 ?forum = vstscode) – buffjape

回答

1

我能够通过使用指定的构造为目标的集级属性来抑制这样的信息:

using System.Diagnostics.CodeAnalysis; 

[assembly: SuppressMessage("Microsoft.Maintainability", 
          "CA1502:AvoidExcessiveComplexity", 
          Scope = "member", 
          Target = "Tools.Builders.Builder.#.cctor()")] 

该属性可以放在程序集中的任何代码文件中。

为了将来的参考,我通过右键单击错误列表窗口中的CA警告(或VS2013及更早版本中的代码分析窗口)并选择抑制 - >抑制文件来生成此属性。

+0

这是一个巧妙的把戏。将该属性从GlobalSuppressions.cs中复制出来,然后可以将其删除 - 将其应用到源代码中会更加整洁。这解决了我的问题,谢谢。 (顺便说一下,你的意思是代码分析窗口而不是错误列表窗口) – Dave

+0

@Dave从VS2015开始,他们结合了这些窗口 - 我将编辑以注意区别。 –

-1

应用下列属性的方法有问题在VS工作对我来说2017年

[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]

+0

这就是我已经试过的 - μS必须在2017年修复它(我在2012年) – Dave