使用“将警告视为错误”时忽略生成的文件

时间:2010-04-30 08:44:46

标签: c# visual-studio visual-studio-2010 msbuild

我们已经开始了一个新项目,但对现有项目也有这个问题。问题是,当我们编译警告级别为4时,我们也想打开

'将所有警告视为错误'

我们暂时无法执行此操作,因为生成的文件(特别是reference.cs文件)缺少XML注释等内容,这会产生警告,我们不想完全禁止所有文件中的xml注释警告仅适用于特定类型的文件(即生成的代码)。

我想到了一种可以实现的方法,但我不确定这些是否是最好的方法,或者确实从哪里开始:)我的想法是我们需要使用T4模板为代码做些什么生成的内容使得它确实填写了生成代码的XML文档。

有没有人有任何想法,目前我的警告超过2k(这是一个大项目):(

5 个答案:

答案 0 :(得分:5)

您可以使用pragma选择性地禁用警告:

// Disable warning messages 4507 and 4034.
#pragma warning( disable : 4507 34 )

如果你可以在生成的代码文件中发出这样的警告(或#include),那就完成了。

或者,您可以在编译器的命令行中全局禁用它们:

/wd4326 disables compiler warning C4326.

然后在您希望它们的文件中重新启用它们(通过头文件):

// Report warning 4326 as an error.
#pragma warning( error : 326 )

最后,您可以通过更改项目文件中的“属性”为每个源文件设置不同的编译选项。就个人而言,我发现维护是一场噩梦,但有时候你别无选择。

编辑:我看到您的源文件是C#,而不是C ++。

使用C#命令行:

to suppress CS0028, you could specify /nowarn:28.

不幸的是,/warnaserror使所有警告错误。

答案 1 :(得分:4)

我编写了一个调用svcutil的PowerShell脚本,然后使用#pragma指令包装自动生成的代码以忽略丢失的xml,但仍允许我根据需要重新生成。

$outFile = 'generatedCode_fromSVCUTIL.cs'
svcutil '..\XML Schema\myXsd.xsd' /dataContractOnly /n:'*,MyNamespace.GeneratedCode' /language:C#  /importxmltypes /out:$outFile

# ----------------------------------------------------- 
# Exempt this file from XML documentation requirements

Write-Host 'Wrapping ', $outFile, ' in #pragma 1591 flags' 
$a = Get-Content $outFile 

# Set up pragma lines for enabling and disabling the XML doc warning
$disableWarning = '#pragma warning disable 1591'
$restoreWarning = '#pragma warning restore 1591'

# wrap the generated code in the pragma tags
Set-Content $outFile –value $disableWarning, $a, $restoreWarning 
Write-Host 'Done.' 

答案 2 :(得分:2)

在VS 2010中,您可以右键单击服务引用,选择“配置服务引用...”并将访问修饰符从“公共”更改为“内部”。 这当然不适合您的特定解决方案,但警告不适用于内部方法,您仍然可以重新生成服务引用。

答案 3 :(得分:1)

对于C#,你可以简单地放置一个

#pragma warning disable 1591

reference.cs文件的开头。然后将不会发出有关缺少XML文档的警告。

但是你必须每次都这样做,文件被重新生成(即当你的服务定义改变时)。我不知道有任何影响代码生成的方法(我不确定他们是否使用T4模板或者这些模板的位置......)

答案 4 :(得分:0)

一些想法。

1)您的文件标题中是否有自动生成的标记(文件顶部的注释),如下所示:

// <auto-generated>

// This file is auto-generated...

// </auto-generated>

此标记很重要(内容不重要),因为某些工具会跳过此类文件(例如,可以将StyleCop配置为忽略这些文件)。

2)如果您要自动生成代码,为什么不自动生成至少一些XML注释?我可以理解你不想花很多时间来记录可能永远不会被读取的代码,但是在调试代码时我常常发现自己正在使用某个自动生成的代理,甚至简单的注释都会有所帮助,甚至如果它只是说“自动生成代码”:)

修改

3)您还可以通过将编译指示添加到构建选项来禁止警告(右键单击项目,选择属性,选择“构建”选项卡)。这比添加代码更方便。尝试将1591;1574;1587添加到“抑制警告”框中。

4)您可以进入“项目属性”中的“代码分析”选项卡,并取消选中“将警告视为错误”,查找导致您出现问题的特定警告。

显然这两个都是全局设置,他们不只是选择自动生成的文件。