2011-04-27 71 views
1

c#/ .net/fxcop!無法抑制FxCop警告CA1062

...在一個類中,我想的FxCop閉嘴抱怨

Warning CA1062 : Microsoft.Design : 
In externally visible method 'xyz', validate parameter 'a' before using it. 

基本上,這條規則表明,我把if (a == null) throw new ArgumentNullException("a");在幾乎每一個方法在我的代碼開始。這會吸引和改變異常處理邏輯。

於是,我把這個地方變成我的類主體:

[SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", 
    Scope = "Type", 
    MessageId = "0", 
    Justification = "We love danger... so far.")] 

無論如何,這甚至不抑制一條消息 - 我仍然得到所有這些警告。如果它恰好位於某個易發生的方法定義之上(即它只能抑制一個單一的警告,而不是全部這種類型),它只會抑制警告。奇怪的是,相同的語法適用於我的課程中多次出現的其他問題。

我不知道我在做什麼錯了,我坦率地不真正理解如何使用屬性參數。http://msdn.microsoft.com/de-de/library/ms244717.aspx並沒有太多細節。 :T ...無論如何,任何想法什麼是不對的?

+0

雖然這不是重複的,但它也可能解決您的問題: http://stackoverflow.com/questions/35551/excluding-fxcop-rule-in-source查看答案那裏,我敢打賭,它可以幫助 – taylonr 2011-04-27 15:23:13

+0

爲什麼不通過你的項目屬性設置禁止這些警告。 – 2013-05-29 10:34:25

回答

4

你想壓制所有類或只有一個類的消息嗎?如果前者,您可以禁用該規則。 (確切的機制取決於你如何運行FxCop,所以如果你需要幫助,請提供詳細信息。)

如果是後者,你至少需要添加一個SuppressMessage屬性檢測問題的每種方法。這是因爲FxCop只會尋求對違規目標的壓制。添加到「父」元素(例如:方法所屬的類)的抑制在嘗試確定違規是否被抑制時從不會被FxCop檢查。

如果使用「目標」屬性,則對於將抑制放置在代碼中的位置具有一定的靈活性,但這不會更改每個違例目標需要一個抑制屬性的需求。

+0

謝謝!還有,那很糟糕,因爲我的班級是一個包含約50種方法的數據類型。我需要將它們放在每個方法定義的前面。 :T ...這是C#;我使用的所有函數都來自.net,並且實際上會自行拋出適當的異常。所以是的,因爲無論如何我都覺得這個規則很少,所以我可能會禁用規則解決方案。 – Efrain 2011-04-28 07:07:10