8

我想知道人们(指公司/开发人员)是否真的关心在运输程序集中放置 [SuppressMessage] 属性。

在发布模式下在包含 CODE_ANALYSIS 的项目文件中创建单独的配置,然后在最终构建中将其拉出,这对我来说似乎是一种可以避免的开销。

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

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

4

3 回答 3

7

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

通常,我只在定义了 CODE_ANALYSIS 的程序集的 DEBUG 版本上运行 FxCop。

于 2008-12-03T18:23:16.753 回答
3

从大局来看,我认为这并不重要。由于这是一个属性(实际上是元数据),它不会影响代码性能。话虽如此,请记住属性中的信息可供任何使用像 Reflector 这样的反汇编程序的人使用。

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

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

从自动/夜间构建的角度来看,您可以使用定义了符号的配置进行构建,然后构建没有符号的生产版本,或者进行两次构建 - 一个定义了符号,运行 FxCop 以获取您的违规行为,然后另一个构建没有定义的符号。

于 2008-12-03T18:27:36.837 回答
1

我们有很多分散在生产代码中,我们并不特别在意。它不会影响性能,并且在一个类中具有一些看起来很糟糕的属性通常会激发尽可能删除它的动力。

于 2008-12-03T18:06:59.890 回答