在源代码中排除代码分析规则
在一个我正在研究FxCop的项目中,向我展示了Windows窗体设计器生成的InitializeComponent()方法上的很多(我的意思是400多个)错误。这些错误大多数只是标签的Text属性的分配。
我想在源代码中禁止使用这些方法,因此我将FxCop生成的禁止代码复制到了AssemblyInfo.cs中,但是不起作用。
这是FxCop复制到剪贴板的属性。
[module: SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", Scope = "member", Target = "WindowsClient.MainForm.InitializeComponent():System.Void", MessageId = "System.Windows.Forms.Control.set_Text(System.String)")]
有人知道禁止显示此消息的正确属性吗?
PS:我正在使用Visual Studio 2005,C#,FxCop 1.36 beta。
解决方案
回答
我们可能已经获得了正确的代码,但是我们还需要在项目属性中添加CODE_ANALYSIS作为预编译器定义的符号。我认为那些SuppressMessage属性仅在定义CODE_ANALYSIS的情况下才保留在编译的二进制文件中。
回答
在命名空间声明之前或者在Assemblyinfo.cs中,需要将模块级别抑制消息粘贴到与引起FxCop错误的代码相同的文件中。此外,我们将需要将CODE_ANALYSIS定义为条件编译器符号("项目">"属性">"生成")。一旦就位,请完全重建项目,并且在下次运行FxCop时,应将错误移至"源中排除"选项卡。
另外,还有一个小技巧,但是如果我们要处理许多FxCop排除项,则在它们周围包裹一个区域可能会很有用,这样我们就可以避免它们。
回答
在FxCop 1.36中,实际上在"拼写和分析"选项卡上有一个项目选项,它将禁止对任何生成的代码进行分析。
如果不想关闭所有生成代码的分析,则需要确保将CODE_ANALYSIS符号添加到条件编译符号列表(项目属性,"构建"选项卡)中。如果未定义此符号,则SupressMessage属性将从已编译的代码中删除,因此FxCop将看不到它们。
SuppressMessage属性的另一个问题是,我们要列出特定方法名称的"目标"(在本例中为WindowsClient.MainForm.InitializeComponent():System.Void),并列出特定的" Scope"。我们可能想尝试删除这些;否则,我们应该将此SuppressMessage添加到方法的每个实例中。
我们还应该升级到FxCop 1.36的RTM版本,该Beta版不会自动检测到较新的版本。