代码生成器生成文件的代码分析 - 如何抑制警告?

Posted

技术标签:

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

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

【问题讨论】:

【参考方案1】:

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

使用 FxCop 项目:

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

通过命令行:

    传递 /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")]

【讨论】:

以上是关于代码生成器生成文件的代码分析 - 如何抑制警告?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Visual Studio 项目中获取抑制的代码分析警告列表?

使用 Scapy 生成数据包的 PDF 时如何抑制 PyX 警告消息?

如何抑制由未能生成的类引起的代码生成错误?

在 Visual Studio 2015 中为自定义代码分析器抑制警告

如何从生成的文件夹中删除自动生成的 proto 文件

SonarScanner (C#) 不支持代码内 StyleCop 警告抑制