我有以下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)'
两者都是空的。有什么建议吗?
答案 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
以启用详细消息。