C# 有没有理由不在生产构建中启用代码分析?

C# 有没有理由不在生产构建中启用代码分析?,c#,code-analysis,fxcop,C#,Code Analysis,Fxcop,当在生产(发布)版本中启用静态代码分析时,是否存在性能成本 我们的CI服务器在C#项目的调试版本上运行代码分析,而发布版本禁用了静态代码分析(即未定义代码分析)。如果没有理由禁用生产构建上的代码分析,那么我就是在调试构建上浪费时间 Reflector向我显示,如果禁用代码分析,则SuppressMessage属性将被排除,但我不希望额外的属性影响运行时性能。这是启用静态代码分析(在Visual Studio 2013中)的唯一效果吗?例如,在启用code\u analysis关键字的情况下进行编

当在生产(发布)版本中启用静态代码分析时,是否存在性能成本

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


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

例如,在启用
code\u analysis
关键字的情况下进行编译时,存在实际差异(因此,当您稍后从命令行运行FxCop时,可能会显示消息,因为抑制已被删除)。如果要在内部系统上安装二进制文件,可以将抑制项保留在二进制文件中。一些公司希望将它们从发布给第三方的程序集中删除,因为这些属性(以及对正属性的内容)的存在可能会泄露敏感信息

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


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

我认为您从错误的角度看待这个问题。代码分析可能会在未优化的IL(调试版本)上给出比优化的IL(发布版本)更好的结果。当您已经准备好构建并将发布版本部署到生产环境中时,仍然需要修复来自代码分析的警告,而这些警告可能需要对代码进行重大重组并重新测试更改,这是一种非常低效的方法。性能不是问题。@hvd这是我最初想法的一部分,但我找不到任何证据表明代码分析在调试版本和发布版本中给出了不同的结果。可以吗?@Hans我们在编译时运行代码分析,如果在代码分析期间发现任何警告,我们的CI服务器在部署之前很久就会停止构建链,所以不用担心。静态代码分析就是静态的。它作为构建过程步骤运行。没有理由在可能运行混淆器的版本上运行构建过程步骤,也没有理由不在这样的版本上运行。answerUpdated to web archive中的死链接。