我们已经开始了一个新项目,但对现有项目也有这个问题。问题是,当我们编译警告级别为4时,我们也想打开
'将所有警告视为错误'
我们暂时无法执行此操作,因为生成的文件(特别是reference.cs文件)缺少XML注释等内容,这会产生警告,我们不想完全禁止所有文件中的xml注释警告仅适用于特定类型的文件(即生成的代码)。
我想到了一种可以实现的方法,但我不确定这些是否是最好的方法,或者确实从哪里开始:)我的想法是我们需要使用T4模板为代码做些什么生成的内容使得它确实填写了生成代码的XML文档。
有没有人有任何想法,目前我的警告超过2k(这是一个大项目):(
答案 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)您可以进入“项目属性”中的“代码分析”选项卡,并取消选中“将警告视为错误”,查找导致您出现问题的特定警告。
显然这两个都是全局设置,他们不只是选择自动生成的文件。