回答

1

如果您使用控制檯運行程序,則可以使用缺陷文件(out-of-source)來抑制方法,類型或程序集中的任何缺陷。

新的Gendarme 2.8對[SuppressMessage]屬性(與fxcop相同)具有基本的(讀取不完整和錯誤)支持。一旦2.10發佈,預計此功能將正常工作。

0

據我所知,無法在Gendarme(2.8)處啓用 [SuppressMessage] 。我抓住了GitHub的最新消息來源,因爲它沒有像描述的那樣工作。

SupressMessageEngine在代碼中存在,並且有測試通過Runner.Engines.Subscribe的手動覆蓋來執行。但[EngineDependency(typeof(SuppressMessageEngine))]不適用於所有編譯規則,這是Gendarme實際運行時訂閱的方式。

我也看過源代碼找到一種方法來始終通過配置訂閱特定的引擎 - 但沒有。

我可能是錯的,但它看起來像一個疏忽,他們忘記回去並應用適當的EngineDependency屬性。

我能想到的唯一「解決方法」是編寫一個自定義規則,在調用時添加一個訂閱SuppressMessageEngine並且不執行任何操作。哈克是的,但這應該基於我在他們的代碼中看到的工作。

僅供參考 - 剛剛實施。您需要創建自己的自定義規則,進口Mono.Cecil能和Gendarme.Framework和目標.NET Framework 3.5的

using Gendarme.Framework; 
using Gendarme.Framework.Engines; 

namespace MyRules 
{ 
    [Problem("Gendarme devs forgot to attribute rules with SuppressMessageEngine")] 
    [Solution("Include this rule")] 
    [EngineDependency(typeof(SuppressMessageEngine))] 
    public class AddSuppressMessageSupportRule : Rule {} 
} 

可悲的是,這會不會拉在FxCopCompatibility屬性是有(即SupressMessage對於符合憲兵規則的FxCop規則也會壓制憲兵規則),但至少它可以讓你使用憲兵隊的名字來壓制。

5

正如poupou已經指出的那樣,版本2.10支持[SuppressMessage]屬性。

例如,爲了抑制AvoidNonAlphanumericIdentifierRule規則,這樣做:

[SuppressMessage("Gendarme.Rules.Naming", "AvoidNonAlphanumericIdentifierRule")] 
protected void Application_Start() 
{ 
    ... 
} 

請注意,您需要指定規則的生活......在這種情況下,AvoidNonAlphanumericIdentifierRule住在憲兵組件的名稱。 Rules.Naming.dll。規則及其組合名稱的完整列表是here

+5

應該注意的是,程序集必須使用定義的'CODE_ANALYSIS'符號進行編譯[爲此工作​​](http://www.mono-project.com/Gendarme.FAQ#Why_are_defects_decorated_using_.5BSuppressMessage.5D_attributes_still_showing_in_my_reports_.3F )。 – 2012-09-26 00:37:08

+0

同樣,最新版本增加了FxCop兼容性,所以如果你已經有一個來自FxCop的SuppressMessage並且在Gendarme中有一個等同的規則,那麼這個消息將被抑制。 – 2014-04-08 13:07:12