60

私は StyleCop を使用しており、私のスタイルに合わない警告を抑制したいと考えています。私は解決策を持っていることを好みます

1) インライン コードの抑制
2) グローバル設定の抑制

私はインターネットを検索しましたが、抑制を行う方法がまだわかりません。

方法 1) の場合、次の行を追加するように言われました。

[アセンブリ: SuppressMessage("Microsoft.Design", "SA1202: すべてのプライベート メソッドは、すべてのパブリック メソッドの後に配置する必要があります", スコープ = "名前空間", ターゲット = "Consus.Client.ClientVaultModule.Services.OnlineDetection")]

しかし、どこでどの名前空間を使用するかについては言及されていません。

2) の方法については、GlobalSuppress ファイルを使用するとのことでしたが、現在、その方法を探すのは簡単ではないようです。

助けてください。

[編集済み] 私の場合、SA1202 に関する警告があります。関連するコードをリージョンにグループ化しているため、すべてのパブリック メソッドの後にすべてのプライベート メソッドを配置する必要があります。特定のメソッドについてのみ、これらの警告を抑制したいと思います。

4

12 に答える 12

49

必要なものは次のとおりです。

[SuppressMessage("Microsoft.StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]
于 2010-07-21T03:41:38.497 に答える
21

インライン抑制の例はこれに似ています - 抑制と比較してコード内の名前空間を調べます

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)")]

また、警告を右クリックすると、このコードを自動的に生成できます。

于 2010-07-20T07:05:51.867 に答える
9

StyleCop 4.3.2 以降では、ソース コード内に抑制属性を追加することで、ルール違反の報告を抑制することができます。

ルール抑制 http://stylecop.soyuz5.com/Suppressions.html

しかし、それは言う -

グローバル抑制

StyleCop は、グローバルな抑制またはファイル レベルの抑制の概念をサポートしていません。抑制はコード要素に配置する必要があります。

于 2011-09-19T12:38:56.113 に答える
7

StyleCop をインストールしている場合は、プロジェクトを右クリックすると、StyleCop オプションが表示されます。これをクリックすると、特定のルールがプロジェクトに対して実行されないようにすることができることがわかります。さらに、別のルール ファイルを作成して、異なるプロジェクト間で共有することもできます。これは、一度ルールを設定して、すべてのプロジェクト間でその設定を共有できることを意味します。

個々のオーバーライドについてSuppressMessageは、行く方法です。

于 2010-07-20T07:02:03.117 に答える
6

Style Cop からの警告を読み、英数字コードを探します。あなたの場合は「SA1202」です。次に、Style Co の Web サイトで対応するページを参照します。必要に応じて URL を変更しますhttps://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1202.md

「違反を抑制する方法」というラベルの付いた行をコピーします。Style Copがうめき声を上げているクラスの上に属性を貼り付けます

[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")]
于 2013-04-09T09:48:50.280 に答える
3

コードを汚す代わりに、ルールを削除することはできませんか?

FxCopについても同じことが言えます...

于 2010-07-20T06:55:19.143 に答える
2

1.あなたの場合、正しいSuppressMessage属性は次のようになります。

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

他の要素に配置できることに注意してください(たとえば、クラスに配置すると、クラス全体で同様の違反がすべて抑制されます)。

また、これらのフィールドに何を書くかはまったく明白ではないことにも同意します。

実際には、最初の名前はStyleCopアナライザークラスの完全修飾名である必要があり、ソースコードから見つけることができます(たとえば、ここから)。2つ目は、ルールコードで始まり、コロンとルール列挙の名前で始まる必要があります(幸い、設定エディターに表示されるルール名と同じように見えますが、空白はありません)。

2.ルールを「グローバルに」抑制することについて-設定エディタでルールをオフにしないのはなぜですか?設定ファイルはファイルシステムを介して継承されるため、フォルダ構造の「上部」に1つの「メイン」設定ファイルと、一部のプロジェクトで作成された例外を除いて、他のいくつかのファイル(メインとの「違い」を保持)を簡単に作成できます。必要に応じて(ここで説明するように)。

幸運を!

于 2011-09-19T18:51:53.080 に答える
1

または、リージョン内のコードを部分クラスに移動することもできます。その後、stylecop ルールの問題は解消されます。

于 2010-08-10T11:06:12.857 に答える