Gau*_*ukh 6 .net c# fxcop fxcopcmd async-await
我正在使用FxCopCmd工具进行静态代码分析.由于我们已经拥有庞大的代码库,因此我们使用FxCop附带的baseline.exe工具为现有问题奠定了基础.
我观察到如果我向我的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)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
这会引发以下错误:
CA1031:Microsoft.Design:修改'Program.d__0.MoveNext()'以捕获比'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是异步的,所以在编译的代码中创建了一个新类(参考这个)(<method1>d__0在第一种情况下).但是当我在method1之前添加另一个方法时,则会在编译代码中创建新类<method1>d__1.因此,不应用抑制消息,并且FxCop再次开始在代码中显示错误.
有没有办法永久抑制异步方法的FxCop错误?
因此,即使在设置了赏金后,这个问题也没有得到解答。但是,我找到了解决方法(如果不是解决方案)。
上述问题是由于编译器为异步方法生成的代码造成的。由于 FxCopCmd 在 dll 上运行,当编译器生成的代码发生更改时,现有的抑制消息将变得毫无用处。但是,Visual Studio 并不仅使用 FxCopCmd 来运行代码分析。它智能地运行代码分析,忽略异步方法。(根据我的调查,它不会对异步方法运行任何类型的代码分析。这一定是由于所讨论的问题造成的。)
为了在 CI 构建中获得与 Visual Studio 相同的行为,我们可以使用 fxcoptask.dll 对代码运行 FxCop 分析。请参阅此答案以了解如何将 FxCop 集成到构建中。这将解决问题中提到的问题。此外,它还提供了很多自定义选项。
| 归档时间: |
|
| 查看次数: |
395 次 |
| 最近记录: |