代码生成器生成文件的代码分析 - 如何抑制警告?
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 警告消息?