2008-08-25 92 views

回答

13

自由使用[SuppressMessage]屬性開始。至少在一開始。一旦通過屬性將計數值設置爲0,您就會得到一條新規則,即不會引入FxCop違規。

Visual Studio 2008具有很好的代碼分析功能,可以確保代碼分析在每個構建版本上運行,並且可以將警告視爲錯誤。這可能會減慢一點,所以我建議設置一個持續集成服務器(如CruiseControl.NET)並讓它在每次簽入時運行代碼分析。

一旦您得到控制權,並且不會在每次簽入時引入新的違規行爲,請開始一次處理整個類別的FxCop違規行爲,目的是移除您使用的SuppressMessageAttributes。

跟蹤您真正想要保留哪些的方法是始終爲您想要抑制的值添加合理值。

3

以傳球風格重寫您的代碼!

說真的,舊的代碼庫會有數百個錯誤 - 但這就是爲什麼我們有新手/實習生程序員。糾正FxCop違規是一個很好的方式來獲得代碼庫的概述,並學習如何編寫符合.NET代碼。

所以,只需咬一口子,喝大量的咖啡因,並在幾天內完成!

0

NDepend looks like它可以做你在做什麼之後,但我不確定它是否可以集成到CruiseControl.Net自動構建中,並且如果代碼不符合要求就會失敗構建(這是我想要發生什麼)。

還有其他想法嗎?

-1

FxCop的替代方法是使用工具NDepend。這個工具允許編寫C#LINQ查詢代碼規則(我們稱之爲CQLinq)。 免責聲明:我是該工具的開發人員之一

默認情況下建議超過200 code rules。定製現有規則或創建自己的規則很簡單,這要歸功於着名的 C#LINQ語法。

爲了使假陽性的數量低,CQLinq提供獨特的功能來定義什麼是集JustMyCode通過與notmycode前綴特殊代碼查詢。有關此功能的更多解釋可以在here找到。這裏有例如兩個notmycode默認查詢:

爲了使假陽性的數量很低,CQLinq你也可以專注規則導致只在代碼中添加或代碼重構,因爲defined baseline in the past。請參見下面的規則,檢測方法,因爲基線過於複雜,增加或重構:

warnif count > 0 
from m in Methods 
where m.CyclomaticComplexity > 20 && 
     m.WasAdded() || m.CodeWasChanged() 
select new { m, m.CyclomaticComplexity } 

最後,注意與NDepend的編碼規則可以被驗證live in Visual Studio並在生成過程中的時間,在generated HTML+javascript report