2012-06-19 106 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