2012-06-19 9 views
5

Ho il seguente compito exec, eseguendo il checkin dei file assemblyinfo.cs. Sto cercando di restituire il codice di uscita, ma per qualche motivo è sempre vuoto.Task exec di MSBuild, codice di uscita vuoto

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

Ho cercato di leggere il codice di uscita in 2 modi:

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

Entrambi sono vuote. Eventuali suggerimenti?

+0

Strano, provare '' – sll

risposta

13

In generale funziona come è stato mostrato.

Per riferimento, ecco un altro esempio "selfcontained":

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

Un paio di cose che si può prendere in considerazione però:

  • assicurarsi che il proprio Exec anche esegue, cioè Condition restituisce True.

  • Emettere la proprietà ErrorCode utilizzando Message -Task, per verificare se è effettivamente impostata (sul valore previsto). Tuttavia, assicurati che MSBuild mostrerà l'output, utilizzando Importance='high' o eseguendo msbuild.exe /v:d per abilitare i messaggi dettagliati.

+0

Problema causato dalla condizione di impedendo il metodo da essere invocato. Grazie – jaspernygaard

+2

Sotto mono/xbuild ho anche dovuto specificare 'IgnoreExitCode =" true "' in '' task per la proprietà da compilare. – weirdan