スタティックコード解析に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
は、私が
ファイルGlobalSuppression.csで、次の抑制メッセージを追加しました[module: SuppressMessage("Microsoft.Globalization", "CA1309:UseOrdinalStringComparison", Scope="member", Target="ConsoleApplication1.Program.d__0.MoveNext()", MessageId="System.String.Equals(System.String,System.StringComparison)", Justification="")]
しかし、クラスにもう一つメソッドを追加すると、このsuppressiオンメッセージが機能しなくなります。これは、method1が非同期であるため、新しいクラスがコンパイルされたコード(最初のケースでは<method1>d__0
)に作成されます(refer this)。しかし、method1の前に別のメソッドを追加すると、コンパイルされたコードで作成された新しいクラスの名前は<method1>d__1
になります。その結果、抑制メッセージは適用されず、FxCopは再びコード内のエラーの表示を開始します。
非同期メソッドのFxCopエラーを永続的に抑制する方法はありますか?
Visual Studio分析を使用して15k + FxCopの問題があるプロジェクトでも、この現象は見たことがありません。あなたはそれを試しましたか? –
プロジェクトに非同期メソッドが含まれていますか?この動作は、非同期メソッドのコンパイルコードによるものです。 –
はい、何百もの非同期メソッドがありました。編集:私はちょうどFxCopを再度実行した、そのビヘイビアーはVisual Studio分析で再現性がありません –