关于Visual Studio:不包括源代码中的代码分析规则

关于Visual Studio:不包括源代码中的代码分析规则

Excluding Code Analysis rule in source

在一个我正在使用FxCop的项目中,向我展示了Windows窗体设计器生成的InitializeComponent()方法上的很多(我的意思是400多个)错误。 这些错误大多数只是标签的Text属性的分配。

我想在源代码中禁止使用这些方法,因此我将FxCop生成的禁止代码复制到AssemblyInfo.cs中,但是不起作用。

这是FxCop复制到剪贴板的属性。

1
2
3
4
5
[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的情况下才保留在编译的二进制文件中。


在FxCop 1.36中,"拼写和分析"选项卡上实际上有一个项目选项,它将禁止对任何生成的代码进行分析。

如果不想关闭所有生成代码的分析,则需要确保将CODE_ANALYSIS符号添加到条件编译符号列表(项目属性,"构建"选项卡)中。如果未定义此符号,则SupressMessage属性将从已编译的代码中删除,因此FxCop将看不到它们。

SuppressMessage属性的另一个问题是,您要列出特定方法名称的"目标"(在本例中为WindowsClient.MainForm.InitializeComponent():System.Void),并列出特定的" Scope"。您可能想尝试删除这些;否则,您应该将此SuppressMessage添加到方法的每个实例中。

您还应该升级到FxCop 1.36的RTM版本,该Beta版不会自动检测到较新的版本。


需要在命名空间声明之前或Assemblyinfo.cs中将模块级别抑制消息粘贴到与引发FxCop错误的代码相同的文件中。此外,您将需要将CODE_ANALYSIS定义为条件编译器符号("项目">"属性">"生成")。一旦就位,请完全重建项目,下次运行FxCop时,错误应移至"源中排除"选项卡。

另外,还有一个小技巧,但是如果您要处理许多FxCop排除项,则在它们周围包裹一个区域可能很有用,这样您就可以避免它们。


推荐阅读