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