【发布时间】:2010-02-08 13:35:33
【问题描述】:
我们对所有源文件运行代码分析。我们的源文件之一是 Linq-To-SQL 生成的文件,我们无法控制生成的输出。生成的代码正在生成我想禁止的代码分析警告。有什么方法可以抑制代码生成文件中的 CA 警告,而不涉及在代码本身中创建属性和/或编译指示(每次生成文件时都会被覆盖)?
【问题讨论】:
标签: c# code-analysis
我们对所有源文件运行代码分析。我们的源文件之一是 Linq-To-SQL 生成的文件,我们无法控制生成的输出。生成的代码正在生成我想禁止的代码分析警告。有什么方法可以抑制代码生成文件中的 CA 警告,而不涉及在代码本身中创建属性和/或编译指示(每次生成文件时都会被覆盖)?
【问题讨论】:
标签: c# code-analysis
你的类有 [GeneratedCode] 属性吗?如果是这样,您可以让 FxCop 忽略它们:
使用 FxCop 项目:
- 在 FxCop 中打开您的 FxCop 项目
- 选择项目 -> 选项 -> 拼写和分析
- 对照生成的代码检查抑制分析结果
- 点击确定
通过命令行:
- 传递 /ignoregeneratedcode 开关,例如:
FxCopCmd.exe /file:MyAssembly.dll /out:AnalysisResults.xml /ignoregeneratedcode
【讨论】:
您可以通过使用您自己的部分类分支来应用该属性来解决缺少GeneratedCode 属性的问题。这意味着您添加的任何自定义代码(包括实现部分方法)都将被排除在外。例如:
namespace MyApp.DB {
[GeneratedCode("LINQ To SQL", "4.0")]
internal partial class MyAppDataContext {
}
// Repeat for each entity
}
【讨论】:
如果您使用 FxCop GUI,您可以简单地在 FxCop 项目中排除这些问题。只需右键单击问题并选择排除在哪里可以添加评论。
但是,如果您在输出窗口中运行 FxCop,我就不知道了。也许您可以检查是否可以创建模块级 SuppressMessage 并将其粘贴到 AssemblyInfo.cs 中。但我不这么认为。
【讨论】:
PLINQO (Linq-to-SQL) CodeSmith templates 也会自动为您生成此属性。大多数加载项也开始忽略文件名中带有“.generated”的部分类。
[System.CodeDom.Compiler.GeneratedCode("CodeSmith", "5.0.0.0")]
【讨论】: