web-dev-qa-db-ja.com

StyleCop警告を抑制する方法は?

StyleCopを使用していて、自分のスタイルに合わない警告を抑制したい。私はのための解決策を持っていることを好む

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

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

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

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

しかし、彼らはどこでどの名前空間を使用するかを述べていません。

方法2)については、GlobalSuppressファイルを使用すると言われましたが、現時点ではその方法を検索するのは簡単ではないようです。

助けてください。

[編集]私の場合、SA1202に関する警告があります:すべてのプライベートメソッドは、すべてのパブリックメソッドの後に配置する必要があります。地域へのコード。いくつかの特定の方法についてのみ、これらの警告を抑制したいと思います。

53
Nam G VU

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

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

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

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

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

20
Sky Sanders

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

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

しかし、それは言う-

グローバル抑制

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

9
akjoshi

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

個別のオーバーライドの場合、SuppressMessageが方法です。

7
Kent Boogaart

Style Copの警告を読み、英数字コードを探してください。あなたの場合「SA1202」。次に、Style Cop Webサイトの対応するページを参照します。必要に応じてURLを変更します http://www.stylecop.com/docs/SA1202.html

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

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

コードを汚すのではなく、規則を削除したいだけですか?

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

4
leppie
  1. ソリューションエクスプローラーに移動
  2. あなたのプロジェクトに行く
  3. 参照を展開する
  4. アナライザーを展開する
  5. StyleCop.Analyzersを展開します
  6. グローバル(プロジェクト)レベルで無効にする特定のルールを右クリックします。
  7. ルールの設定重大度の設定->選択なし
3
Akshunya

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

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

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

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

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

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

がんばろう!

2
Oleg Shuruev

プロジェクトのルートフォルダにある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>
1
Ashwini Patil

あるいは、リージョン内のコードを部分クラスに移動することもできます。その後、stylecopルールの問題はなくなります。

1
Philip Smith

既に実施されている有益な回答に加えて:

抑制ファイルで警告を抑制する場合GlobalSuppressions.cs、それを編集できます[Assembly: SuppressMessage(StyleCop...blabla行を削除し、Scope=...およびTarget=...タグ。これにより、プロジェクト内で抑制がグローバルになります。

0
Stefan Bormann

Visual Studio 2015+で使用される StyleCop.Analyzers NuGetパッケージの README.md には、 ルールのドキュメント へのリンクが含まれています。各ルールのドキュメントには、「違反を抑制する方法」セクションが含まれています。 SA1202ルール の場合、オプションは次のとおりです。

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

そして

#pragma warning disable SA1202 // ElementsMustBeOrderedByAccess
#pragma warning restore SA1202 // ElementsMustBeOrderedByAccess
0
Ryan Prechel