2017-09-02 127 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