2010-07-20 129 views
48

我正在使用StyleCop,並想壓制一些不適合我的風格的警告。我喜歡有如何禁止StyleCop警告?

1溶液)行代碼抑制
2)全球環境抑制

我在網上搜索,但still not sure怎麼做的抑制。

對於方法1),他們說,添加行:

[裝配:SuppressMessage( 「Microsoft.Design」, 「SA1202:所有的私有方法必須放在所有公共方法後」, 範圍=「命名空間」,目標=「Consus.Client.ClientVaultModule.Services.OnlineDetection」)]

但他們不說哪裏和哪個命名空間被使用。

對於方法2),他們說使用GlobalSuppress文件,但目前似乎並不容易搜索如何做。

請幫忙。

[編輯] 就我而言,我有警告有關SA1202:所有的私有方法必須放在所有公共方法因爲我組這是困擾我的相關代碼到區域之後。我想壓制這些警告只是一些特定的方法。

+3

理想的情況下,用鼠標右鍵單擊,「抑制」(或右點擊「修復」)。但StyleCop是由受虐狂寫的,所以你必須手工修復所有問題。如果有任何設計要由機器完成的工作,就是這樣。真是浪費。 – 2015-04-02 09:49:36

回答

4

不能刪除規則而不是弄髒代碼?

也是一樣的FxCop ...

+0

我剛剛添加了爲什麼我不能獨享代碼的原因。請看我編輯的問題。 – 2010-07-20 07:03:40

6

如果你已經安裝了StyleCop,您可以用鼠標右鍵單擊您的項目,會出現一個選項StyleCop的。點擊這個,你會看到你可以防止某些規則甚至對你的項目運行。而且,您可以創建單獨的規則文件以在不同項目之間共享。這意味着您可以按照您希望的方式配置規則,然後在所有項目之間共享該配置。

對於個別覆蓋,SuppressMessage是要走的路。

18

直列抑制的一個例子是與此類似 - 檢查相比,抑制

namespace Soapi 
{ 
     ///<summary> 
     ///</summary> 
     ///<param name = "message"></param> 
     ///<param name = "statusCode"></param> 
     ///<param name = "innerException"></param> 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.String.Format(System.String,System.Object,System.Object)")] 
     public ApiException(string message, ErrorCode statusCode, Exception innerException) 
      : base(String.Format("{0}\r\nStatusCode:{1}", message, statusCode), innerException) 
     { 
      this.statusCode = statusCode; 
     } 

全局supression文件中的代碼的命名空間是在項目的根目錄中的文件名爲GlobalSuppressions.cs和看起來像這樣:

// This file is used by Code Analysis to maintain SuppressMessage 
// attributes that are applied to this project. 
// Project-level suppressions either have no target or are given 
// a specific target and scoped to a namespace, type, member, etc. 
// 
// To add a suppression to this file, right-click the message in the 
// Error List, point to "Suppress Message(s)", and click 
// "In Project Suppression File". 
// You do not need to add suppressions to this file manually. 

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.String.Format(System.String,System.Object,System.Object,System.Object)", Scope = "member", Target = "Soapi.ApiException.#.ctor(System.String,Soapi.ErrorCode,System.String,System.Exception)")] 

您可以通過右鍵單擊警告自動生成此代碼。

+3

我試過右鍵單擊警告(在錯誤/警告列表中),但沒有任何上下文菜單項允許我禁止它。我正在使用VS 2010.你知道爲什麼嗎? – 2010-07-20 07:17:06

+0

@Nam - 不確定,我舉的例子是使用vs2008。讓我點燃2010年,並採取偷看。 – 2010-07-20 07:35:51

+0

@poet:我已經在這裏發佈我的相關問題http://stackoverflow.com/questions/3287957/how-to-supress-stylecop-warning-sa1201-all-methods-must-be-placed-after-all-親 – 2010-07-20 07:50:17

44

這裏有您需要什麼:

[SuppressMessage("Microsoft.StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")] 
+7

你是如何演繹這兩個魔法字符串的?所有OP發佈的代碼是'SA1202'。我有一個類似的問題(代碼'SP0100'),我不能推斷出相應的字符串。 – 2013-01-07 14:40:31

+0

@Colonel Panic:運行時可以從StyleCop警告消息中獲取第一個字符串。例如。 「SA1202:CSharp.OrderingRules:blahblah」。然後用編輯器打開StyleCop設置文件,並用SA代碼搜索以找到實際的規則,它是短名稱。 – Hirvox 2013-02-20 09:54:06

+6

如果您訪問http://www.stylecop.com/docs/SA1202.html(或其他警告的類似頁面url),您可以找到非常清晰的抑制消息語法細節。 – Seph 2013-09-24 10:16:40

1

或者,也可以在區域移動代碼到部分類。那麼stylecop規則的問題就會消失。

9

從StyleCop開始4.3。2,可以通過在源代碼中添加抑制屬性來抑制規則違規的報告。

規則鎮壓 http://stylecop.soyuz5.com/Suppressions.html

但它說 -

全球鎮壓

了StyleCop不支持全局鎮壓或 文件級鎮壓的概念。抑制必須放在代碼 元素上。

+0

提供相同的信息這裏也是 - http://blogs.msdn.com/b/sourceanalysis/archive/2009/08/10/rule-suppressions.aspx – akjoshi 2011-09-19 12:56:52

2

1. 在你的情況,正確SuppressMessage屬性應該像這樣的:

[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")] 
private void SomeMethod() 
{ 
} 

請注意,您可以將它放在任何其他元素(例如上,在類 - 那麼所有類似的侵權行爲在整個班級將被壓制)。

我也同意在這些領域寫什麼是很不明顯的。

實際上,第一個應該是StyleCop分析器類的完全合格名稱,可以從源代碼中找到(例如從here)。 第二個應該從規則代碼開始,然後冒號和規則枚舉的名稱(幸運的是,它總是看起來像設置編輯器中顯示的規則名稱,但沒有空格)。

2. 關於抑制規則「全局」 - 爲什麼不只是通過設置編輯器關閉它們?設置文件是通過文件系統繼承的,因此您可以在文件夾結構的「頂部」輕鬆地創建一個「主」設置文件,其他一些文件(與main保持「差異」)以及某些項目的異常,如果你想這樣(像描述here)。

祝你好運!

2

從Style Cop閱讀警告,尋找字母數字代碼。在你的情況'SA1202'。然後瀏覽到Style Cop網站上的相應頁面。根據需要更改URL http://www.stylecop.com/docs/SA1202.html

複製標有'如何抑制違規行'的行。關於哪些類型警匪呻吟

[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")] 
0

類以上的屬性粘貼您可以禁用規則,你不希望在Settings.StyleCop文件,該文件是在項目的根文件夾。 您將需要一個包含規則,它可以在這裏找到命名空間: http://stylecop.soyuz5.com/StyleCop%20Rules.html

Settings.stylecop文件中的代碼,供大家參考:

<StyleCopSettings Version="105"> 
    <Analyzers> 
    <Analyzer AnalyzerId="StyleCop.CSharp.LayoutRules"> 
     <Rules> 
     <Rule Name="ElementsMustBeSeparatedByBlankLine"> 
      <RuleSettings> 
      <BooleanProperty Name="Enabled">False</BooleanProperty> 
      </RuleSettings> 
     </Rule> 
     </Rules> 
     <AnalyzerSettings /> 
    </Analyzer> 
    </Analyzers> 
</StyleCopSettings> 
+0

如果你能展示一些例子,這會更有幫助OP可能需要。 – sorak 2018-03-08 21:46:49