5

MSからのこの記事を見て、SolutionToBuildセクションについて質問があります。

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

ビルドの順序は上記の順序で決まるとのことです。したがって、たとえば、MySolutionは落書きの前に構築されます。

ただし、落書きがMySolutionに依存している場合、これは安全ですか?たとえば、MySolutionは、scribbleによって使用される1つ以上のdllを出力します。MySolutionと落書きが同時に変更された場合、ビルドはMySolutionが完全にコンパイルされるのを待ってから、次のプロジェクトに移動しますか?

4

2 に答える 2

6

項目 SolutionToBuild に追加のメタデータを使用することができます。再帰と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>
于 2010-06-09T12:36:21.257 に答える
1

ソリューションの依存関係をどのように管理しますか?代わりにプロジェクトを参照していませんか?また、いくつかのソリューションの「同時」変更についても戸惑っています。これらの変更の性質を明確にしてください。

これまでのところ、あなたの質問に対する答えは次のとおりです。

  1. いいえ。次々にコンパイルされる可能性がありますが、依存関係の対象になりますか?
  2. はい。シーケンスが必須の場合、ビルダーは各ソリューションがビルドされるまで(成功またはエラーのいずれかで)「待機」してから、次のソリューションに移動します。
于 2010-06-07T18:08:26.100 に答える