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='&quot;$(TfCommand)&quot; 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)'

两者都是空的。有什么建议吗?

【问题讨论】:

奇怪,试试&lt;Message Text="The exit code is $(ErrorCode)"/&gt; 【参考方案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 下,我还必须在 &lt;Exec&gt; 任务中指定 IgnoreExitCode="true" 才能填充属性。 另外,由于github.com/nunit/nunit-console/issues/242,我建议设置IgnoreStandardErrorWarningFormat="true"。否则ExitCode 可能是-1 而不是启动进程的实际退出代码。

以上是关于MSBuild exec 任务,退出代码为空的主要内容,如果未能解决你的问题,请参考以下文章

错误 MSB6006:“CL.exe”以代码 2 退出

错误 MSB6006:“lc.exe”以代码 -1 退出

error MSB6006: “cmd.exe”已退出,代码为 3。

msbuild 错误 MSB3191:在远程服务器中发布时无法创建目录

Visual Studio 2015 中的错误:错误 MSB4166:子节点“3”过早退出。关机

为啥 Msbuild 任务无法部署数据库,但 Exec 工作正常