Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用“时忽略生成的文件”;“将警告视为错误”;_C#_Visual Studio_Visual Studio 2010_Msbuild - Fatal编程技术网

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

C# 使用“时忽略生成的文件”;“将警告视为错误”;,c#,visual-studio,visual-studio-2010,msbuild,C#,Visual Studio,Visual Studio 2010,Msbuild,我们已经开始了一个新项目,但现有项目也存在这个问题。问题是,当我们以4级警告级别编译时,我们也希望打开 '将所有警告视为错误' 我们目前无法做到这一点,因为生成的文件(特别是reference.cs文件)缺少XML注释之类的内容,这会生成一个警告,我们不希望仅针对特定类型的文件(即生成的代码)将XML注释警告完全从所有文件中取消 我已经想到了一种可以实现这一点的方法,但不确定这是否是最好的方法,或者从哪里开始:)我的想法是,我们需要为生成的代码使用T4模板,这样它就可以为生成的代码填充XML文档

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

'将所有警告视为错误'

我们目前无法做到这一点,因为生成的文件(特别是reference.cs文件)缺少XML注释之类的内容,这会生成一个警告,我们不希望仅针对特定类型的文件(即生成的代码)将XML注释警告完全从所有文件中取消

我已经想到了一种可以实现这一点的方法,但不确定这是否是最好的方法,或者从哪里开始:)我的想法是,我们需要为生成的代码使用T4模板,这样它就可以为生成的代码填充XML文档


有人有什么想法吗,目前我有超过2k个警告(这是一个大项目):(

您可以使用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
会产生所有警告错误。

对于C#您只需放置一个

#pragma warning disable 1591
reference.cs
文件的开头,则不会发出有关缺少XML文档的警告

但是每次重新生成文件时(即当您的服务定义更改时),您都必须这样做。我不知道有什么方法可以影响代码生成(我不确定他们是否使用T4模板,或者这些模板可能位于何处…

一些想法

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

/

//此文件是自动生成的…

/

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

2) 如果您正在自动生成代码,为什么不至少自动生成一些XML注释呢?我可以理解,您不想花费大量时间来记录可能永远不会被阅读的代码,但在调试代码时,我经常发现自己会访问一些自动生成的代理,甚至一条简单的注释也会有所帮助,即使它只是说“自动生成的代码”:

编辑

3) 还可以通过将pragmas添加到生成选项(右键单击项目,选择“属性”,选择“生成”选项卡)来抑制警告。这比添加到代码更方便。尝试添加
1591;1574;1587
到抑制警告框

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


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

在VS 2010中,您可以右键单击服务引用,选择“配置服务引用…”,并将访问修饰符从公共更改为内部。

这当然可能不适合您的特定解决方案,但警告不适用于内部方法,您仍然可以重新生成服务引用

我编写了一个PowerShell脚本,它调用svcuti,然后用#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.' 

有趣的是,正如下面的(Windows程序员)所说的,您可以在.csproj属性中基于每个源文件更改属性,我找不到这是如何实现的。这是在抑制警告:文本框中完成的吗?老实说,我非常想忽略生成的代码。恐怕您必须使用C#命令行编译器(csc.exe)。其想法是,一旦添加了#pragma warning disable,就可以设置。您只需更新代码生成器一次。你必须选择更改代码生成器吗?是的,这是一个问题,它是一个维护噩梦,每次都必须这样做,同样,它看起来很有用,但如果可能的话,我希望每次都能这样做。我恐怕这不能解决问题,visual studio在生成文档时似乎忽略了这些标题存在的事实。好的,在我的列表中添加了一个想法:)我不明白为什么这会吸引反对票,下面的投票者是否至少有礼貌地留下一条评论,说明这个回答有什么问题?这里所有的评论都是有用的,但不幸的是,没有解决眼前的问题。这里的主要问题是,似乎没有办法轻易忽略自动生成代码上的错误警告,如果VS2010中有一个选项将其设置为自定义代码注入,这可能会解决维护问题。在可能的情况下,总会有人重新生成代码并忘记pragma,这会破坏我试图自动化该步骤的构建。您可以设置各个源文件的属性,包括各个源文件的编译器选项。这些将否决从项目级别继承的属性。我对上述内容进行了评论,但是的,这是如何实现的,请您举个例子。对不起,我不确定是否可以为C#执行此操作。对于C++,在“解决方案资源管理器”窗口中,可以右击单个文件的文件名并设置其属性。有时我需要用不同的代码编译一个源文件