MSBuild exec 任务,退出代码为空
Posted
技术标签:
【中文标题】MSBuild exec 任务,退出代码为空【英文标题】:MSBuild exec task, exit code empty 【发布时间】:2012-06-19 07:18:01 【问题描述】:我有以下 exec 任务,执行 assemblyinfo.cs 文件的签入。我试图返回退出代码,但由于某种原因它总是空的。
<!--Checkin if all succeeded-->
<Exec Condition=" '$(LocalCompilationSuccess)' != 'Failed' and '$(LocalTestSuccess)' != 'Failed' " ContinueOnError="True"
Command='"$(TfCommand)" checkin /recursive /comment:"$(NoCICheckInComment) $(BuildDefinitionName): build succeeded, checkin changes." /override:"TeamBuild $(BuildDefinitionName)" $/SomeProject/Trnk' WorkingDirectory="$(SolutionRoot)" >
<Output TaskParameter="ExitCode" PropertyName="ErrorCode"/>
</Exec>
我尝试通过两种方式读取退出代码:
'%(ErrorCode.Identity)'
'$(ErrorCode)'
两者都是空的。有什么建议吗?
【问题讨论】:
奇怪,试试<Message Text="The exit code is $(ErrorCode)"/>
【参考方案1】:
一般情况下,如您所展示的那样工作。
作为参考,这里有一个更“独立”的例子:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<Target Name="help">
<Exec ContinueOnError="True" Command='cmd.exe /c dir'>
<Output TaskParameter="ExitCode" PropertyName="ErrorCode"/>
</Exec>
<Message Importance="high" Text="$(ErrorCode)"/>
</Target>
</Project>
不过,您可能需要考虑以下几点:
确保您的Exec
甚至执行,即Condition
评估为
True
。
使用Message
-Task 输出ErrorCode
属性,以查看它是否实际设置(为您期望的值)。但是,请确保 MSBuild 将显示输出,方法是使用 Importance='high'
或运行 msbuild.exe /v:d
以启用详细消息。
【讨论】:
由于条件阻止方法被调用引起的问题。谢谢 在 mono/xbuild 下,我还必须在<Exec>
任务中指定 IgnoreExitCode="true"
才能填充属性。
另外,由于github.com/nunit/nunit-console/issues/242,我建议设置IgnoreStandardErrorWarningFormat="true"
。否则ExitCode
可能是-1
而不是启动进程的实际退出代码。以上是关于MSBuild exec 任务,退出代码为空的主要内容,如果未能解决你的问题,请参考以下文章
error MSB6006: “cmd.exe”已退出,代码为 3。
msbuild 错误 MSB3191:在远程服务器中发布时无法创建目录