gpt4 book ai didi

c# - 有什么理由不在生产版本中启用 CODE_ANALYSIS 吗?

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

在生产(发布)构建中启用静态代码分析时是否会产生任何性能成本?

我们的 CI 服务器在 C# 项目的调试版本上运行代码分析,而发布版本禁用了静态代码分析(即未定义 CODE_ANALYSIS)。如果没有理由在生产构建中禁用代码分析,那么我就是在浪费时间进行调试构建。

Reflector 向我显示,如果代码分析被禁用,则 SuppressMessage 属性将被排除,但我不认为额外的属性会影响运行时性能。这是启用静态代码分析(在 Visual Studio 2013 中)的唯一效果吗?

最佳答案

在启用 CODE_ANALYSIS 关键字的情况下进行编译时存在实际差异,例如 the compiler will remove all [SuppressMessage] attributes from the assembly when it is not enabled (并且可能因此导致消息在您稍后从命令行运行 FxCop 时显示,因为抑制已被删除)。如果您在内部系统上安装二进制文件,则保留二进制文件中的抑制可能没问题。一些公司希望将它们从发布给第 3 方的程序集中删除,因为这些属性(以及 Justification 属性的内容)的存在可能会泄露敏感信息。

DEBUG 构建上运行代码分析时,您可能会得到更严格的结果,大多数 RELEASE 构建中发生的某些优化可能会导致特定的 FxCop 规则丢失。优化可能会删除私有(private)方法(通过内联)或用值代替对常量的调用,而不是常量的定义。 FxCop 将无法验证这些项目,因为它们已被删除。这是意料之中的事。

为获得最佳结果:在调试版本中运行代码分析。为了尽可能少地泄露信息,请从发布版本中删除 CODE_ANALYSIS 常量。

关于c# - 有什么理由不在生产版本中启用 CODE_ANALYSIS 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22199568/

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