我正在使用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)
{
}
}
}
這將引發以下錯誤:
CA1031 : Microsoft.Design : Modify 'Program.d__0.MoveNext()' to catch a more specific exception than 'Exception' or rethrow the exception
爲了抑制 'CA1309 UseOrdinalStringComparison' 的問題,我說按照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="")]
但是如果我在課堂上再添加一個方法,那麼這個抑制在消息停止工作。這是因爲method1是異步的,因此在編譯代碼中創建了一個新類(refer this)(在第一種情況下爲<method1>d__0
)。但是當我在method1之前添加另一個方法時,編譯代碼中創建的新類名爲<method1>d__1
。因此,抑制消息未應用,並且FxCop再次開始在代碼中顯示錯誤。
有什麼辦法可以永久性地抑制異步方法的FxCop錯誤嗎?
即使在使用Visual Studio分析出現15k + FxCop問題的項目中,我也從未見過這種行爲。你有嘗試過嗎? –
您確定該項目涉及異步方法嗎?行爲是由於編譯異步方法的代碼。 –
是的,它有數百個異步方法。編輯:我剛剛再次運行FxCop,該行爲是不可重現的Visual Studio分析 –