Joe*_*ung 6 c# code-analysis fxcop
在生产(发布)版本中启用静态代码分析时是否存在任何性能成本?
我们的CI服务器在C#项目的调试版本上运行代码分析,而发布版本禁用静态代码分析(即未定义CODE_ANALYSIS).如果没有理由在生产版本上禁用代码分析,那么我就是在浪费时间进行调试构建.
反射器向我显示,SuppressMessage如果禁用代码分析,则排除属性,但我不希望额外属性影响运行时性能.这是启用静态代码分析的唯一效果(在Visual Studio 2013中)吗?
在使用CODE_ANALYSIS启用关键字进行编译时存在实际差异,例如,编译器将[SuppressMessage]在未启用时从程序集中删除所有属性(因此可能会导致在以后从命令行运行FxCop时显示消息,因为抑制已被删除).如果您在内部系统上安装二进制文件,可以将抑制项留在二进制文件中.有些公司希望将它们从发布给第三方的程序集中删除,因为这些属性(以及Justification属性的内容)的存在可能会泄露敏感信息.
在DEBUG构建上运行代码分析时,您可能会得到更严格的结果,大多数RELEASE构建中发生的某些优化可能导致特定的FxCop规则丢失.优化可以删除私有方法(通过内联)或用值替换对常量的调用,而不是常量的定义.FxCop无法验证这些项目,因为它们已被删除.这是可以预料的.
为获得最佳结果:在Debug构建中运行代码分析.至少信息泄露,CODE_ANALYSIS从发布版本中删除常量.