0

我正在使用的 c# 项目打开了“错误警告”,并且它们在代码中有很多抑制。其中包括:

[System.Diagnostics.CodeAnalysis.SuppressMessage(
"Microsoft.Maintainability"
, "CA1500:VariableNamesShouldNotMatchFieldNames"
, MessageId = "CS$<>8__locals1")]

如果我删除抑制,构建将失败。如何找出 c# 代码中的哪个特定标识符导致警告?

4

1 回答 1

2

在这种情况下,你不能。看到MessageId值是"CS$<>8__locals1"- 这是 C# 编译器生成的本地,所以你不会直接在 C# 源代码中看到它 - 你必须使用像 ILSpy 或 Reflector 这样的工具来查看 CIL 和变量。根据这个 QA,这个locals名字意味着它是一个闭包类变量的名字——这意味着你在某个地方使用了一个 lambda 函数。

但是,不必手动禁止此操作,因为 FxCop 足够聪明,可以了解 C# 编译器生成的本地和字段(字段或其封闭类型[CompilerGenerated]无论如何都会被注释)。我猜您的构建过程使用的是最新的 C# 编译器,但是 FxCop 的非常旧版本无法识别新的 C# 语言功能。

于 2018-03-05T18:43:33.787 回答