MSBuild exec任务,退出代码为空

时间:2012-06-19 07:18:02

标签: msbuild exec exit-code

我有以下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)'

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

1 个答案:

答案 0 :(得分:13)

一般来说,它的效果与你所示的一样。

供参考,这是一个更“自我包含”的例子:

<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

  • 使用ErrorCode - 任务输出Message属性,以查看它是否实际设置(达到您期望的值)。但是,请确保MSBuild将显示输出,方法是使用Importance='high'或运行msbuild.exe /v:d以启用详细消息。