簡體   English   中英

如何取消StyleCop警告?

[英]How to suppress a StyleCop warning?

我正在使用StyleCop,並且想隱瞞一些不適合我的風格的警告。 我更願意為

1)內聯代碼抑制
2)全局設置抑制

我已經搜索了互聯網,但仍不確定如何進行抑制。

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

[程序集:SuppressMessage(“ Microsoft.Design”,“ SA1202:所有私有方法必須放在所有公共方法之后”,Scope =“名稱空間”,Target =“ Consus.Client.ClientVaultModule.Services.OnlineDetection”)]

但是他們沒有說要在哪里使用哪個名稱空間。

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

請幫忙。

就我而言,我有關於SA1202的警告:所有私有方法都必須放在所有公共方法之后 ,這很麻煩,因為我將相關代碼分組到各個區域中。 我只想通過某些特定方法來抑制那些警告。

這是您需要的:

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

內聯抑制的示例與此類似-將代碼中的命名空間與抑制進行比較

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;
        }

全局壓縮文件是項目根目錄中名為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)")]

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

從StyleCop 4.3.2開始,可以通過在源代碼中添加禁止屬性來禁止報告違規行為。

規則抑制http://stylecop.soyuz5.com/Suppressions.html

但它說-

全球抑制

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

如果已安裝StyleCop,則可以右鍵單擊項目,然后會有一個StyleCop選項。 單擊此按鈕,您將看到甚至可以阻止某些規則針對您的項目運行。 此外,您可以創建一個單獨的規則文件以在不同項目之間共享。 這意味着您可以按照自己的方式配置規則,然后在所有項目之間共享該配置。

對於單個替代, SuppressMessage是必經之路。

閱讀Style Cop的警告,尋找字母數字代碼。 您的情況是“ SA1202”。 然后瀏覽到Style Cop網站上的相應頁面。 適當更改URL https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1202.md

復制標有“如何禁止違規”的行。 將屬性粘貼到有關Style Cop抱怨的類上方

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

難道您只是刪除規則而不是弄臟代碼?

FxCop也是如此...

  1. 轉到解決方案資源管理器
  2. 去你的項目
  3. 擴展參考
  4. 擴展分析儀
  5. 展開StyleCop.Analyzers
  6. 右鍵單擊要在全局(項目)級別禁用的特定規則
  7. 設置規則集嚴重性->不選擇

1.根據您的情況,正確的SuppressMessage屬性應類似於以下內容:

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

請注意,您可以將其放置在任何其他元素上(例如,在類上-然后將禁止整個類中的所有類似違規行為)。

我也同意在這些領域寫什么還不太清楚。

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

2.關於“全局”抑制規則-為什么不只是通過“設置編輯器”將其關閉? 設置文件是通過文件系統繼承的,因此您可以輕松地在文件夾結構的“頂部”擁有一個“主”設置文件,以及一些其他文件(保留與主文件的“區別”),但某些項目例外,如果你想這樣(像描述在這里 )。

祝好運!

或者,您可以將區域中的代碼移動到部分類中。 這樣,stylecop規則的問題就會消失。

您可以在項目根文件夾中的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>

除了已經提供的有用答案之外:

如果您在禁止文件GlobalSuppressions.cs禁止顯示警告,則可以編輯[assembly: SuppressMessage(StyleCop...blabla line,並完全刪除Scope=...Target=...標簽。在項目中。

README.mdStyleCop.Analyzers由Visual Studio 2015+使用NuGet包中包含的鏈接的規則文件 每個規則的文檔均包含“如何抑制違規”部分。 對於SA1202規則 ,選項為:

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

#pragma warning disable SA1202 // ElementsMustBeOrderedByAccess
#pragma warning restore SA1202 // ElementsMustBeOrderedByAccess

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM