- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在生产(发布)构建中启用静态代码分析时是否会产生任何性能成本?
我们的 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/
在生产(发布)构建中启用静态代码分析时是否会产生任何性能成本? 我们的 CI 服务器在 C# 项目的调试版本上运行代码分析,而发布版本禁用了静态代码分析(即未定义 CODE_ANALYSIS)。如果没
我是一名优秀的程序员,十分优秀!