2012-06-19 30 views
5

Assemblyinfo.cs dosyalarının check inini gerçekleştirerek, aşağıdaki yürütme görevim var. Çıkış kodunu döndürmeye çalışıyorum ama bazı sebeplerden dolayı her zaman boş.MSBuild exec görev, çıkış kodu boş

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

ben 2 şekilde çıkış kodu okumaya çalıştım:

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

İkisi boştur. Baska öneri?

+0

Garip, 'denemek çağrılmasını yöntemini engelleyerek durumu neden' ​​ – sll

cevap

13

Genel olarak, gösterdiğiniz gibi çalışır.

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

sen ancak düşünebilirsiniz birkaç şey:

  • emin Exec bile yürütür olun, yani Referans için

    , burada daha "selfcontained" örneğidir Condition, True değerini değerlendirir.

  • Message -Task'ı kullanarak, gerçekten ayarlanmış olup olmadığını (beklediğiniz değere) bakarak ErrorCode özelliğini kullanın. Ancak, MSBuild'in, iletiyi Importance='high' kullanarak veya ayrıntılı iletileri etkinleştirmek için msbuild.exe /v:d'u çalıştırarak göstereceğini unutmayın.

+0

Sorun <İleti Metni =/"çıkış kodu $ (HataKodu) 'dir">. Teşekkürler – jaspernygaard

+2

Mono/xbuild altında, mülkün doldurulması için '' işlevinde 'IgnoreExitCode =" true "' özelliğini de belirtmem gerekiyordu. – weirdan