我想知道人们(指公司/开发人员)是否真的关心在发布程序集中放置SuppressMessage属性。
在项目文件中创建单独的配置,在发布模式下包含CODE_ANALYSIS,然后在最终构建中将其取消,这对我来说似乎是一种可以避免的开销。
如果不希望这些保留在最终的程序集中,但仍然希望在代码中使用它们,那么最好的策略是什么?将它们存储在FxCop项目文件中有什么优点/缺点吗?
我来自VS2008 Pro+FxCop 1.36,而不是VS2008 Team System
发布于 2008-12-03 18:27:37
从大局来看,我不认为这真的很重要。因为这是一个属性(有效的元数据),所以它不会影响代码性能。也就是说,请记住,属性中的信息对于任何使用disassember的人都是可用的,比如Reflector。
将它们存储在FxCop项目文件中的问题是,您必须确保每个人都使用相同的项目文件,并且项目文件始终随项目一起传递(它已签入到源代码管理,这意味着您必须在每次运行FxCop时将其签出)。
如果您不想在生产代码中使用SuppressMessage属性,那么您只需要在运行FxCop的构建中定义CODE_ANALYSIS符号。这意味着要么在您的Debug配置中定义它,要么添加其他配置。只有在定义了符号后,才会将属性编译到代码中。
从自动/夜间构建的角度来看,您可以使用定义了符号的配置进行构建,然后构建没有符号的生产版本,或者执行两个构建-一个定义了符号,运行FxCop来获取违规信息,然后另一个构建没有定义符号。
发布于 2008-12-03 18:23:17
只有在编译过程中存在CODE_ANALYSIS预处理器定义时,才会将SuppressMessage属性添加到代码中。您可以通过查看Reflector.exe中的属性定义来验证这一点。默认情况下,这不是在版本中定义的,所以它不会影响生产代码。
通常,我只在定义了CODE_ANALYSIS的程序集的调试版本上运行FxCop。
发布于 2008-12-03 18:07:00
我们有一大堆的生产代码,我们并不特别关心。它不会影响perf,而且在一个类中有一些看起来很粗糙的属性通常会促使你在可能的情况下删除它。
https://stackoverflow.com/questions/338112
复制相似问题