Visual Studio 代码分析规则 1804 的异常行为

Bizzare behaviour with Visual Studio Code Analysis Rule 1804

我们正在使用 Visual Studio Code Analysis Rules 进行代码质量检查。我们已经创建了我们的自定义 .ruleset 文件并将一些违规标记为 Errors,这样每次有人违反这些规则时,他都会遇到编译错误并且必须解决问题。

现在 运行 在 debug 模式下一切正常,但是当我在 release 模式下构建我的项目时,我没有收到任何规则错误 1804 i.e. Remove unused locals。事实上,这个违规行为完全不在违规列表中,甚至不作为警告!!

知道需要将构建配置设置为 运行 你的代码分析规则,我在项目属性中为所有配置启用了代码分析,就像这样 - 这样做适用于除 1804 以外的所有其他规则。

它看起来像是代码分析的错误,还是出于某种我不知道的原因它是有效的行为,有什么办法让它工作吗?

我正在使用 Visual Studio 2013

这并不像你想象的那么奇怪。 FxCop 作用于二进制文件,而不作用于源代码。在发布模式下,编译器将应用优化,例如删除未使用的局部变量、简化 if/else 语句和其他导致相同执行但具有更高性能或更低内存使用的东西。

优化掉这些代码后,FxCop 将无法检测到它。

这就是为什么对未优化的二进制文件进行二进制分析最有意义的原因。

在 Visual Studio 2015 年,大部分分析已转移到 Roslyn 分析器中,它将通过分析源代码而不是二进制输出来捕获这些问题。这将允许代码分析(2015 年)检测这些问题,即使它们没有进入最终的二进制文件。