抑制生成的C#代码的警告提示

23

我在我的VS项目中启用了"将警告视为错误",这意味着我会因缺少文档而得到错误提示(对于这个特定的项目来说是一个不错的提醒)。

然而,部分代码是由自定义工具生成的,该工具不会插入xml文档,所以我正在寻找一种方法来忽略仅针对已生成的代码的缺少xml文档的警告,而不是整个项目。我对实际生成的文件没有影响,也不能在文件中真正插入任何内容(因为它经常被工具重新生成),因此我正在寻找在生成的文件之外存在的某些东西(如果生成的类是partial的话,这可能有帮助)。


1
@TomTom:嗯,我不认为这是一个有效的解决方案(而且称他为愚蠢有点过头了,作者在SO上比我们两个人都多100k分...) - soren.enemaerke
3个回答

13

避免生成的代码产生警告或Code Analysis错误的最佳方法是使用GeneratedCodeAttribute修饰生成的类,并使代码文件以*.generated.cs模式结尾。

如果您的代码文件还具有文件头,请添加以下标记:

//----------------------
// <auto-generated>
//     Tool description
// </auto-generated>
//----------------------

这不是强制性的,但如果您有代码文件头,这是一个好习惯。

这样一来,FxCop和其他类似StyleCop的工具将不再分析您的代码。

异常的是,您的代码生成工具没有使用上述属性修饰代码元素。试着查看工具设置中是否有启用该选项或联系开发团队。


编辑: 生成的类是否是部分类,实际类的名称和数量是否经常更改?因为如果生成的代码内容变化不大,您可以简单地创建另一个代码文件,并声明生成的部分类以使用GeneratedCodeAttribute对其进行修饰。有一次它救了我的命(和时间!)。


5
“我对实际生成的文件没有影响” - 那这个答案不就被排除了吗? - Jon Skeet
1
我明白问题所在,我之前也遇到了来自Codeplex的DSL相同问题。事实上,如果它经常被重新生成,你不想每次都手动修改它。我所做的就是联系Codeplex开发者解决了这个问题。实际上有两种解决方案:查找工具中要启用的设置或联系开发团队。 - Ucodia
1
@TomTom(和@TheRHCP):正如Jon所指出的那样,我无法控制生成的代码,因此无法添加属性。此外,部分类可以解决类上缺少的注释问题,但无法帮助我处理属性/方法... - soren.enemaerke
1
我正在使用WCF RIA生成的代码遇到了类似的问题。所有*.g.i.cs生成的文件头部都有"auto-generated",但是VS 2010代码分析工具仍然会对它们产生错误。有什么建议吗? - David Moye

10

编辑:看到评论表明这种方法无法在C# 4中使用。我不确定它是否适用于编译器的早期版本。不过,C# 4规范已经说明得很清楚了。第2.5.8.1节指出:

#pragma warning restore 指令将所有警告或给定的一组警告恢复到编译单元开始时的状态。请注意,如果某个特定的警告被外部禁用,#pragma warning restore(不论是为了所有还是指定的警告)都不会重新启用该警告。

Jeff 在他的博客文章中有一个解决方案 - 基本上是将自动生成的代码作为构建的一部分重新处理。


如 Tom 所说,您可以向整个项目添加“忽略”(生成 / 抑制警告 - 输入1591作为警告编号) - 但是然后您可以在每个您的非生成文件的顶部还原警告:

#pragma warning restore 1591

它相当丑陋,但它确实起作用了(我刚刚测试过了)。


@TomTom:以什么方式?你可以相当容易地自动化检查,确保每个非生成文件的开头都有那个编译指示。 (OP很可能已经有一些用于检查版权声明等内容的东西 - 可以很容易地修改以包括该编译指示。)最终结果是OP想要的:对于没有XML注释的手写文件出现错误,而对于生成的文件则不会出现这样的错误。 - Jon Skeet
接受这个答案,因为所有其他的答案都没有解决不触碰生成的文件的问题......干得好,Jon。 - soren.enemaerke
1
@Jon:这对C# 4不起作用。 根据规范,如果警告已全局禁用(即由项目),则还原将恢复到该全局状态(即禁用)。 我应该补充说,我尝试过它(我不仅仅是读规范)。 - Jeff Yates
@Jeff:哎呀,好奇怪啊。我想知道之前它是否真的有效...已经编辑了我的答案 :( - Jon Skeet
1
@Jon:请查看此博客条目,其中包含使用MSBuild 4的可行解决方案。这适用于我的Windows Workflow自动生成的文件(尽管我只禁用了1591而不是全部)。http://lvquoc.blogspot.com/2010/11/disable-xml-comment-warning-in-workflow.html - Jeff Yates

2

在这方面,您能做的最好的事情就是抑制包含生成代码的项目中的特定警告。您可以在“项目属性”中的“构建”选项卡中执行此操作。虽然不是理想的解决方案,但除了将pragma放入生成的代码之外,这是您能做的最好的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接