装运组件fxcop中的.NET [SuppressMessage]属性

时间:2008-12-03 18:01:26

标签: c# .net fxcop

我想知道人们(意味着公司/开发商)是否真的关心装运装配中存在[SuppressMessage]属性。

在Project文件中创建单独的配置,在Release模式下包含CODE_ANALYSIS,然后在最终版本中将其关闭,这对我来说似乎是一种可以避免的开销。

如果不希望这些仍留在最终装配中但仍希望在代码中使用它们,那么最好的策略是什么? 将它们存储在FxCop项目文件中是否有任何优点/缺点?

[我来自VS2008 Pro + FxCop 1.36,而不是VS2008 Team System]

3 个答案:

答案 0 :(得分:7)

如果在编译期间存在CODE_ANALYSIS预处理器定义,则SuppressMessage属性将仅添加到您的代码中。您可以通过查看Reflector.exe中属性的定义来验证这一点。默认情况下,未在Release中定义,因此不会影响生产代码。

通常,我只在我的程序集的DEBUG构建中运行FxCop,其中定义了CODE_ANALYSIS。

答案 1 :(得分:2)

在宏伟的计划中,我认为这不重要。由于这是一个属性(有效的元数据),因此不会影响代码性能。话虽如此,请记住,使用像Reflector这样的反汇编的人都可以使用属性中的信息。

将它们存储在FxCop项目文件中的问题是,您必须确保每个人都使用相同的项目文件,并且项目文件始终随项目一起移动(它已签入源代码管理,这意味着您必须检查它每次你想运行FxCop时都出来。

如果您不想在生产代码中使用SuppressMessage属性,则只需要在运行FxCop的构建中定义CODE_ANALYSIS符号。这意味着在Debug配置或添加其他配置时定义它。只有在定义符号时,才会将属性编译到代码中。

从自动/夜间构建的角度来看,您可以使用具有已定义符号的配置进行构建,然后在不使用符号的情况下构建生产版本,或者执行两个构建 - 一个具有已定义的符号,运行FxCop以获取违规,以及然后是另一个没有定义符号的构建。

答案 2 :(得分:1)

我们分散了生产代码,我们并不特别在意。它不会影响性能,并且在课堂上有一些看似古怪的属性,如果可能的话,通常会有动力去除它。