2010-06-07 36 views
5

Nhìn vào số article từ MS, tôi có một câu hỏi về phần SolutionToBuild.MSBuild Build Sequence

<ItemGroup> 
    <SolutionToBuild Include="$(SolutionRoot)\path\MySolution.sln /> 
    <SolutionToBuild Include="$(SolutionRoot)\Scribble\scribble.sln" /> 
    <SolutionToBuild Include="$(SolutionRoot)\HelloWorld\HelloWorld.sln" /> 
    <SolutionToBuild Include="$(SolutionRoot)\TestProject1\TestProject1.sln" /> 
</ItemGroup> 

Nó nói rằng trình tự xây dựng được xác định theo thứ tự trên. Vì vậy, ví dụ, MySolution sẽ được xây dựng trước khi viết nguệch ngoạc.

Tuy nhiên, điều này có an toàn nếu viết nguệch ngoạc là phụ thuộc trên MySolution? Ví dụ, MySolution xuất ra một hoặc nhiều dlls được sử dụng bởi scribble. Nếu MySolution và scribble được thay đổi cùng một lúc, sẽ xây dựng chờ đợi cho MySolution được biên soạn hoàn toàn trước khi chuyển sang dự án tiếp theo?

Trả lời

5

Bạn có thể thử sử dụng siêu dữ liệu bổ sung cho mục SolutionToBuild. Một số làm việc với đệ quy và voilà!

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
<ItemGroup> 
    <SolutionToBuild Include="$(SolutionRoot)\Scribble\levelone.sln"> 
     <DependsOnSolutions>$(SolutionRoot)\Scribble\leveltwo.sln</DependsOnSolutions> 
    </SolutionToBuild>   
    <SolutionToBuild Include="$(SolutionRoot)\Scribble\leveltwo.sln"> 
     <DependsOnSolutions>$(SolutionRoot)\Scribble\levelthree.sln;$(SolutionRoot)\TestProject1\TestProject1.sln</DependsOnSolutions> 
    </SolutionToBuild> 
    <SolutionToBuild Include="$(SolutionRoot)\Scribble\levelthree.sln" /> 
    <SolutionToBuild Include="$(SolutionRoot)\TestProject1\TestProject1.sln" /> 
</ItemGroup> 

<Target Name="Build"> 
    <MSBuild Projects="$(MSBuildProjectFile)" 
      Targets="BuildSolution"     
      Properties="SolutionFullPath=%(SolutionToBuild.Identity)"/> 
</Target> 

<Target Name="BuildSolution"> 
    <CreateItem Condition="'%(SolutionToBuild.Identity)'=='$(SolutionFullPath)'" 
     Include="%(SolutionToBuild.DependsOnSolutions)"> 
     <Output TaskParameter="Include" 
       ItemName="DependentSolutions" /> 
    </CreateItem> 

    <Message Text="Building solution $(SolutionFullPath)..." />   
    <Message Text="Solution $(SolutionFullPath) depends on %(DependentSolutions.Identity)..." 
      Condition="'@(DependentSolutions)'!=''"/> 
    <Message Text="Building dependent solutions..." 
      Condition="'@(DependentSolutions)'!=''"/> 

    <MSBuild Projects="$(MSBuildProjectFile)" 
      Targets="BuildSolution" 
      Properties="SolutionFullPath=%(DependentSolutions.Identity)" 
      Condition="'@(DependentSolutions)'!=''"/> 

    <!-- <MSBuild Projects="$(SolutionFullPath)" /> --> 
    <Message Text="Building solution $(SolutionFullPath)... OK" /> 
</Target> 
</Project> 
1

Bạn quản lý giải pháp phụ thuộc như thế nào? Bạn có tham chiếu dự án thay thế không? Tôi cũng bối rối về những thay đổi 'đồng thời' trên một số giải pháp của bạn. Vui lòng làm rõ bản chất của những thay đổi này.

Cho đến nay, câu trả lời cho câu hỏi của bạn là:

  1. số Họ có thể được biên dịch một sau khi khác, nhưng nó đủ điều kiện cho sự phụ thuộc?
  2. Có. Nếu trình tự là bắt buộc, người xây dựng sẽ 'chờ' cho đến khi mỗi giải pháp được xây dựng (thành công hoặc lỗi) trước khi chuyển sang bước tiếp theo.
+0

Tôi đã cập nhật câu hỏi của mình. Bạn có thể làm rõ ý nghĩa của từ "Nếu chuỗi là bắt buộc" không? –

+0

Tôi có nghĩa là, nếu xây dựng không song song và các giải pháp được xây dựng theo thứ tự hàng đợi ... thì người xây dựng sẽ thực sự chờ đợi. Tuy nhiên, tôi không hiểu cách cập nhật đồng thời trong cả hai giải pháp có thể xảy ra hoặc tác dụng phụ nào sẽ xảy ra trong quá trình xây dựng - có lẽ không, vì điều thực sự quan trọng là thời gian cập nhật liên quan đến thời gian bắt đầu của bản dựng . BTW, bạn có thể kiểm tra tình trạng này? – Humberto