gpt4 book ai didi

c# - FxCop:异步方法的抑制消息

转载 作者:太空狗 更新时间:2023-10-29 21:53:07 25 4
gpt4 key购买 nike

我正在使用 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)
{

}
}
}

这会引发以下错误:

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 错误?

最佳答案

所以即使设置了赏金,问题也没有得到解答。但是,我找到了解决方法(如果不是解决方案的话)。

提到的问题是由于编译器为异步方法生成的代码。由于 FxCopCmd 在 dll 上运行,随着编译器生成的代码发生更改,现有的抑制消息变得无用。但是,Visual Studio 不会仅通过使用 FxCopCmd 来运行代码分析。它智能地运行代码分析,忽略异步方法。 (根据我的调查,它没有对异步方法运行任何类型的代码分析。这一定是由于所讨论的问题所致。)

要在 CI 构建中获得与 Visual Studio 相同的行为,我们可以使用 fxcoptask.dll 对代码运行 FxCop 分析。引用this answer了解如何在构建中集成 FxCop。这将解决问题中提到的问题。此外,它还提供了许多自定义选项。

关于c# - FxCop:异步方法的抑制消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40512289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com