19

在我正在研究 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。

4

3 回答 3

18

您可能已经获得了正确的代码,但您还需要在项目属性中添加 CODE_ANALYSIS 作为预编译器定义的符号。我认为如果定义了 CODE_ANALYSIS ,那些 SuppressMessage 属性只会留在编译的二进制文件中。

于 2008-08-30T01:37:11.273 回答
4

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

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

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

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

于 2008-08-30T01:57:48.807 回答
2

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

此外,还有一个小技巧,但如果您正在处理大量 FxCop 排除项,则在它们周围环绕一个区域可能会很有用,这样您就可以将它们排除在外。

于 2008-08-30T01:52:50.533 回答