2012-06-19 1 views
5

У меня есть следующая задача exec, выполняющая checkin файлов assemblyinfo.cs. Я пытаюсь вернуть код выхода, но по какой-то причине он всегда пуст.MSBuild exec task, exit code

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

В целом, он работает так, как вы показали.

Для справки, здесь более «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> 

Несколько вещей, которые вы можете рассмотреть, однако:

  • Убедитесь, что ваш Exec даже выполняется, то есть Condition - True.

  • Вывести объект ErrorCode, используя Message -Task, чтобы узнать, действительно ли оно установлено (к ожидаемому значению). Однако убедитесь, что MSBuild покажет вывод, используя либо Importance='high', либо выполнив msbuild.exe /v:d, чтобы включить подробные сообщения.

+0

Проблема вызвана условием предотвращения метод от того вызывается. Спасибо – jaspernygaard

+2

В mono/xbuild мне также пришлось указать 'IgnoreExitCode =" true "' в '' задача для свойства, которое будет заселено. – weirdan