【问题标题】:Code Analysis on a Code Generator Generated File - How to Suppress Warnings?代码生成器生成文件的代码分析 - 如何抑制警告?
【发布时间】:2010-02-08 13:35:33
【问题描述】:

我们对所有源文件运行代码分析。我们的源文件之一是 Linq-To-SQL 生成的文件,我们无法控制生成的输出。生成的代码正在生成我想禁止的代码分析警告。有什么方法可以抑制代码生成文件中的 CA 警告,而不涉及在代码本身中创建属性和/或编译指示(每次生成文件时都会被覆盖)?

【问题讨论】:

    标签: c# code-analysis


    【解决方案1】:

    你的类有 [GeneratedCode] 属性吗?如果是这样,您可以让 FxCop 忽略它们:

    使用 FxCop 项目:

    1. 在 FxCop 中打开您的 FxCop 项目
    2. 选择项目 -> 选项 -> 拼写和分析
    3. 对照生成的代码检查抑制分析结果
    4. 点击确定

    通过命令行:

    1. 传递 /ignoregeneratedcode 开关,例如:
         FxCopCmd.exe /file:MyAssembly.dll /out:AnalysisResults.xml /ignoregeneratedcode
    

    http://blogs.msdn.com/fxcop/archive/2008/02/28/faq-how-do-i-prevent-fxcop-1-36-from-firing-warnings-against-generated-code.aspx

    【讨论】:

    • 如果我使用命令行调用 fxcopcmd.exe,SuppressMessage 是否有效?
    【解决方案2】:

    您可以通过使用您自己的部分类分支来应用该属性来解决缺少GeneratedCode 属性的问题。这意味着您添加的任何自定义代码(包括实现部分方法)都将被排除在外。例如:

    namespace MyApp.DB {
        [GeneratedCode("LINQ To SQL", "4.0")]
        internal partial class MyAppDataContext {
        }
    
        // Repeat for each entity
    }
    

    【讨论】:

      【解决方案3】:

      如果您使用 FxCop GUI,您可以简单地在 FxCop 项目中排除这些问题。只需右键单击问题并选择排除在哪里可以添加评论。
      但是,如果您在输出窗口中运行 FxCop,我就不知道了。也许您可以检查是否可以创建模块级 SuppressMessage 并将其粘贴到 AssemblyInfo.cs 中。但我不这么认为。

      【讨论】:

      • 在 SO 上的相关问题中还有另一个答案,表明您可以将模块级抑制添加到 assemblyinfo.cs,但我只是尝试过,但无法正常工作。我可以将 SuppressMessage 添加到每个单独的方法中,但是当我想忽略特定程序集中所有内容的错误时,这完全是一件令人头疼的事情。希望有人能回答这个问题!!!
      【解决方案4】:

      PLINQO (Linq-to-SQL) CodeSmith templates 也会自动为您生成此属性。大多数加载项也开始忽略文件名中带有“.generated”的部分类。

      [System.CodeDom.Compiler.GeneratedCode("CodeSmith", "5.0.0.0")]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-09
        • 2011-02-11
        • 2010-12-08
        • 2019-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多