Смотря на эту статью от MS, у меня есть вопрос о разделе SolutionToBuild.
Это говорит, что последовательность сборки определяется порядком выше. Так, например, MySolution был бы создан перед каракулями.
Однако действительно ли это безопасно, если каракули являются иждивенцем на MySolution? Например, выводы MySolution один или несколько dlls, которые используются каракулями. Если MySolution и каракули будут изменены одновременно, то сборка будет ожидать MySolution, который будет полностью скомпилирован прежде, чем переместиться в следующий проект?
Вы можете попробовать использовать дополнительные метаданные для элемента SolutionToBuild. Некоторые работают с рекурсией и вуаля!
<?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>
Как вы управляете зависимостью решения ? Разве вы не ссылаетесь на проекты вместо этого? Я также озадачен «одновременными» изменениями некоторых ваших решений. Уточните, пожалуйста, характер этих изменений.
Пока что ответы на ваши вопросы: