8

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

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

4

1 回答 1

18

一般来说,它的工作原理与您所展示的一样。

作为参考,这里有一个更“独立”的例子:

<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使用-Task输出属性Message,以查看它是否实际设置(为您期望的值)。但是,请确保 MSBuild 将显示输出,方法是使用Importance='high'或运行msbuild.exe /v:d以启用详细消息。

于 2012-06-19T11:20:10.037 回答