2012-06-19 8 views
5

Tengo la siguiente tarea ejecutiva, realizando la comprobación de archivos assemblyinfo.cs. Intento devolver el código de salida, pero por alguna razón siempre está vacío.tarea ejecutiva de MSBuild, código de salida vacío

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

He tratado de leer el código de salida de 2 maneras:

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

Ambos están vacías. ¿Alguna sugerencia?

+0

extraño, probar '' – sll

Respuesta

13

En general, funciona como lo ha demostrado.

Para referencia, aquí es un ejemplo más "autocontenido":

<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 par de cosas que usted puede desear considerar sin embargo:

  • asegurarse de que su Exec incluso se ejecuta, es decir Condition evalúa a True.

  • Imprima la propiedad ErrorCode utilizando Message -Task, para ver si realmente está configurada (al valor que espera). Sin embargo, asegúrese de que MSBuild muestre la salida, ya sea usando Importance='high' o ejecutando msbuild.exe /v:d para habilitar los mensajes detallados.

+0

Problema causado por la condición prevenir el método que se invoque. Gracias – jaspernygaard

+2

En mono/xbuild también tuve que especificar la tarea 'IgnoreExitCode =" true "' en '' para que se rellenara la propiedad. – weirdan

Cuestiones relacionadas