2012-06-19 108 views
5

我有以下执行任务,执行签入的assemblyinfo.cs文件。我试图返回退出代码,但由于某种原因它总是空的。MSBuild执行任务,退出代码空

<!--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> 

我已经试过2种方式来读取退出代码:

'%(ErrorCode.Identity)' 
'$(ErrorCode)' 

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

+0

奇怪的是,尝试''''' – sll

回答

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

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

+0

由条件导致的问题阻止该方法被调用。谢谢 – jaspernygaard

+2

在mono/xbuild下,我还必须在''任务中指定'IgnoreExitCode =“true”'来填充属性。 – weirdan