【问题标题】:Excluding Code Analysis rule in source在源代码中排除代码分析规则
【发布时间】:2010-09-07 07:48:38
【问题描述】:

在我从事 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。

【问题讨论】:

    标签: visual-studio code-analysis fxcop suppression initializecomponent


    【解决方案1】:

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

    【讨论】:

    • 我有一个包含多个项目的解决方案。必须为每个项目添加 CODE_ANALYSIS。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 2019-12-26
        相关资源
        最近更新 更多