2012-06-19 38 views
5

Tôi có nhiệm vụ exec sau, thực hiện việc kiểm tra các tệp assemblyinfo.cs. Tôi đang cố gắng trả lại mã thoát, nhưng vì lý do nào đó, nó luôn trống.Tác vụ MSBuild exec, mã thoát rỗng

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

Tôi đã cố gắng để đọc mã lối ra trong 2 cách sau:

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

Cả hai đều trống rỗng. Bất kỳ đề xuất?

+0

Lạ, hãy thử '' – sll

Trả lời

13

Nói chung, nó hoạt động như bạn đã hiển thị.

Để tham khảo, đây là một nhiều hơn "selfcontained" Ví dụ:

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

Một vài điều bạn có thể muốn xem xét tuy nhiên:

  • Hãy chắc chắn rằng Exec của bạn thậm chí thực thi, đó là Condition đánh giá là True.

  • Xuất sản phẩm ErrorCode bằng cách sử dụng Message -Thể thao, để xem liệu nó có thực sự được đặt hay không (theo giá trị bạn mong đợi). Tuy nhiên, đảm bảo MSBuild sẽ hiển thị đầu ra, bằng cách sử dụng Importance='high' hoặc bằng cách chạy msbuild.exe /v:d để bật thông báo chi tiết.

+0

Sự cố gây ra bởi điều kiện ngăn chặn phương thức được gọi. Cảm ơn – jaspernygaard

+2

Theo mono/xbuild, tôi cũng phải chỉ định 'IgnoreExitCode =" true "' trong tác vụ '' cho thuộc tính được điền. – weirdan

Các vấn đề liên quan