如何在命令行中使用MSBuild抑制所有编译器和代码分析警告?

14

这个问题曾经被提出,但没有得到答复。答案(使用/warn:1)对于msbuild.exe无效,只对csc.exe有效。也许我错过了csc和msbuild之间的某些内容?

当我使用命令行msbuild时,我想抑制所有编译器警告和代码分析警告(例如,“变量'variableNameHere'被分配但其值...”或“代码分析警告:CA1805 :Microsoft.Performance:...”)。我不想改变解决方案文件。在我正在构建的非常大的解决方案中有几百条警告消息-修复它们超出了我的项目范围。

我尝试了/v:quiet,但没用。

有没有办法通过命令行实现这一点?

更新:

C:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe C:\Dev\ReallyBigSolution.sln /p:NoWarn=true /p:NoWarn=CA1031

绝对无效。我仍然收到数百个警告,包括我特别阻止的警告(CA1031)。

使用/p:RunCodeAnalysis=Never/p:RunCodeAnalysis=false显然不能抑制代码分析警告或错误。


我想知道为什么MSBuild没有用户界面(UI)?看起来它真的需要一个。猜测各种设置只是浪费时间。 - jcollum
你不需要猜测。使用VS,修改项目属性(构建选项卡或代码分析选项卡),然后查看哪些更改被保存到.csproj文件中。MSBuild的整个重点是成为一个命令行工具。 - Brian
@Brian:我已经查看了csproj属性页面,没有关于这些代码分析警告的任何内容。我想我要放弃了。在这上面浪费太多时间了。我以为这很容易,只是缺少一些命令行。 - jcollum
6个回答

15

您可以在编译器上使用nowarn标志,它对应于.csproj文件中的<NoWarn>属性。因此,也许msbuild /p:NoWarn="37;68"会关闭这些警告号码(我还没有尝试过)。

或者使用

http://msdn.microsoft.com/en-us/library/13b90fz7.aspx

要完全关闭警告。我不知道属性名称,尝试/p:Warn=0

编辑:阅读末尾的评论;似乎真正摆脱所有这些警告是不可能的。


只需在Visual Studio中编辑抑制的警告或警告级别(项目属性,生成选项卡),保存项目,然后检查.csproj文件以查看“正确类型的属性”应该是什么样子(例如<Name>Value</Name>)。然后使用命令行将这些传递给msbuild,格式为/p:Name=Value - Brian
不要将 CA 放入 NoWarn 列表中,只需放入编号即可。 - Brian
我认为NoWarn允许范围(例如1-3000)。 - Brian
@Brian:啊,我明白了关于CA的事情。不幸的是,无论我使用1031还是CA1031,代码分析警告都会出现。我对msbuild的看法越来越低了... - jcollum
这是当前版本。仍然收到代码分析警告:C:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe C:\Dev\BigSolution.sln /p:NoWarn=true /p:NoWarn=1-3000 /p:RunCodeAnalysis=false - jcollum
显示剩余10条评论

12

我知道这是一篇旧帖子,但它让我找到了正确的方法,在我的msbuild调用中添加以下内容,它抑制了所有警告和输出,同时构建项目。我将其放在批处理文件中,因此我认为唯一的输出结果是最终结果以及任何我使用echo提示的消息。关键在于/clp开关。所以我查阅了相关资料并加入了所有可以抑制输出的选项。每个选项都能够消除更多的输出,但仍然会出现黄色警告。当我加入ErrorsOnly开关时,就没有更多输出了。

call msbuild /clp:NoSummary;NoItemAndPropertyList;ErrorsOnly /verbosity:quiet /nologo

4

试试这个:

msbuild.exe C:\Dev\BigSolution.sln /p:WarningLevel=0 /p:RunCodeAnalysis=false

1

我已经尝试过这个方法,但是除非我在msbuild.exe的/NoWarn属性中列出警告,否则无法抑制它们。


0

是的,我看过了。它适用于MSBuild警告。我想要抑制编译器警告。已编辑问题。 - jcollum

0

看起来不可能...

以MSB为前缀的警告是由MSBuild引发的。目前,我们无法抑制MSBuild警告。


只适用于某些情况而非全部情况:例如 CS0219(变量“xxxxxx”被赋值但其值从未使用)不是 MSBuild 错误。 - jcollum
那是一个编译器警告,不是 MSB 警告。 你是否传递了参数...你是否查看了这个...http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/94ae238b-e755-4023-a6cb-c113df841c82/ - Aaron McIver
是的,我已经阅读过了。这涉及到更改解决方案,这就是为什么我在问题中指定我不想更改.sln文件的原因。我所要求的可能是不可能的 /sadface - jcollum
所以您不想更改项目?例如在VS中忽略警告...?您只想在msbuild期间发生这种行为? - Aaron McIver
你尝试过在这里找到的 property:RunCodeAnalysis=false 吗?https://dev59.com/_knSa4cB1Zd3GeqPSO_x - Aaron McIver

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