2016-11-09 10 views
6

スタティックコード解析にFxCopCmdツールを使用しています。既に巨大なコードベースを持っていたので、FxCopに付属のbaseline.exeツールを使用して既存の問題をベースライン化しました。FxCop:非同期メソッドの抑制メッセージ

C#クラスに新しいメソッドを追加すると、GlobalSuppression.csファイル内の抑制メッセージの一部が機能しなくなり、私が触れていないコードの問題が発生することがわかりました。

例:

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     public async Task<string> method1() 
     { 
      string a = ""; 
      a.Equals("abc", StringComparison.InvariantCultureIgnoreCase); 
      return a; 
     } 

     static void Main(string[] args) 
     { 

     }   
    } 
} 

これは、次のエラースロー: 'CA1309 UseOrdinalStringComparison' 問題を抑制するためには

CA1031 : Microsoft.Design : Modify 'Program.d__0.MoveNext()' to catch a more specific exception than 'Exception' or rethrow the exception

は、私が

[module: SuppressMessage("Microsoft.Globalization", "CA1309:UseOrdinalStringComparison", Scope="member", Target="ConsoleApplication1.Program.d__0.MoveNext()", MessageId="System.String.Equals(System.String,System.StringComparison)", Justification="")]

ファイルGlobalSuppression.csで、次の抑制メッセージを追加しました

しかし、クラスにもう一つメソッドを追加すると、このsuppressiオンメッセージが機能しなくなります。これは、method1が非同期であるため、新しいクラスがコンパイルされたコード(最初のケースでは<method1>d__0)に作成されます(refer this)。しかし、method1の前に別のメソッドを追加すると、コンパイルされたコードで作成された新しいクラスの名前は<method1>d__1になります。その結果、抑制メッセージは適用されず、FxCopは再びコード内のエラーの表示を開始します。

非同期メソッドのFxCopエラーを永続的に抑制する方法はありますか?

+0

Visual Studio分析を使用して15k + FxCopの問題があるプロジェクトでも、この現象は見たことがありません。あなたはそれを試しましたか? –

+0

プロジェクトに非同期メソッドが含まれていますか?この動作は、非同期メソッドのコンパイルコードによるものです。 –

+0

はい、何百もの非同期メソッドがありました。編集:私はちょうどFxCopを再度実行した、そのビヘイビアーはVisual Studio分析で再現性がありません –

答えて

2

賞金を設定した後でさえ、質問は答えられなかった。しかし、回避策が見つかった(解決策ではない場合)。

上記の問題は、非同期メソッド用のコンパイラ生成コードによるものです。 FxCopCmdはdllで実行されるため、コンパイラ生成コードが変更されると、既存の抑制メッセージは役に立たなくなります。ただし、Visual StudioはFxCopCmdを使用するだけではコード分析を実行しません。非同期メソッドをインテリジェントに無視してコード解析を実行します。 (私の調査によると、非同期メソッドに関するコード分析は一切行われません。問題の原因でなければなりません)。

CIビルドでVisual Studioと同じ動作をするには、コードのFxCop解析を実行するためのfxcoptask.dll。 FxCopをビルドに統合する方法については、this answerを参照してください。これは、問題で言及されている問題を解決します。また、多くのカスタマイズオプションを提供します。

関連する問題