【问题标题】:Bizzare behaviour with Visual Studio Code Analysis Rule 1804Visual Studio 代码分析规则 1804 的奇怪行为
【发布时间】:2015-11-10 09:33:43
【问题描述】:

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

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

知道需要设置构建配置来运行代码分析规则,我已经为项目属性中的所有配置启用了代码分析,如下所示 - 这样做适用于除 1804 之外的所有其他规则。

这似乎是代码分析的错误,还是出于某种我不知道的原因,它是一种有效的行为,有什么可以让它工作的吗?

我正在使用 Visual Studio 2013

【问题讨论】:

  • 警告没有齿,基本原因是默认没有开启。编译器已经在优化的发布版本中删除了未使用的局部变量。另请注意,您必须拥有完整的 .pdb,这是发布版本中的另一个问题。
  • 感谢@HansPassant。知道编译器如何处理未使用的变量真是太好了。但是我认为打开这个警告仍然很好,因为我们已经看到了一些实例,比如在 heave db 调用之后填充一个集合或者像这样,并且它没有被使用,所以不仅仅是那个变量,而是调用说 db 等. 也可以从代码中清除。谢谢

标签: visual-studio code-analysis fxcop


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    相关资源
    最近更新 更多