在我正在研究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。
答案 0 :(得分:18)
您可能已获得正确的代码,但您还需要在项目属性中添加CODE_ANALYSIS作为预编译器定义的符号。我认为如果定义了CODE_ANALYSIS,那些SuppressMessage属性只会保留在已编译的二进制文件中。
答案 1 :(得分:4)
在FxCop 1.36中,“Spelling& Analysis”选项卡上实际上有一个项目选项,它会对任何生成的代码进行分析。
如果您不想为所有生成的代码关闭分析,则需要确保将CODE_ANALYSIS符号添加到条件编译符号列表(项目属性,“构建”选项卡)。如果没有定义此符号,SupressMessage属性将从编译的代码中删除,因此FxCop将不会看到它们。
您的SuppressMessage属性的另一个问题是您列出了特定方法名称的“目标”(在本例中为WindowsClient.MainForm.InitializeComponent():System.Void)并列出了特定的“范围”。您可能想尝试删除这些;否则你应该将此SuppressMessage添加到方法的每个实例。
您还应该升级到FxCop 1.36的RTM version,测试版不会自动检测到新版本。
答案 2 :(得分:2)
模块级抑制消息需要粘贴到与命名空间声明之前或在assemblyinfo.cs中引发FxCop错误的代码相同的文件中。此外,您需要将CODE_ANALYSIS定义为条件编译器符号(Project> Properties> Build)。一旦到位,完成项目的重建,下次运行FxCop时,错误应移至“源中排除”选项卡。
另外,一个小技巧,但是如果你正在处理很多FxCop排除项,那么在它们周围包裹一个区域可能会很有用,这样你就可以将它们排除在外。