[英]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.根據您的情況,正確的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.md為StyleCop.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.