VisualStudios sln-файлы очень ограничены и записаны в формате, определенном десятилетия назад.Фактически, он преобразуется в msbuild-скрипт, прежде чем делать что-нибудь полезное.
Для большей гибкости я добавил msbuild-скрипт (master.msbuild) с чем-то похожим на это (непроверенный, но правильная документация доступна )
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectsToBuild Include="longrunningproject.proj" />
<ProjectToBuild
Include="SolutionWithTheOther69Projects.sln"
Properties="Configuration=Debug;Platform=x86"/>
</ItemGroup>
<Target Name="Build" >
<MSBuild
Projects="@(ProjectsToBuild)"
Targets="Build"
BuildInParallel="true"
ContinueOnError="false"
Properties="VeloxVersion=$(VeloxVersion);RootDir=$(RootDir)"
/>
</Target>
</Project>
Проекты выполняются в порядке их определения.Пока что нет контроля над тем, что происходит в решении, но я могу ставить проекты впереди или позади него и влиять на порядок сборки.
Если долгосрочная задача вызывается с помощью msbuild-exec-task, онаважно установить флаг YieldDuringToolExecution
этой задачи.Например,
<Exec
Command="..."
YieldDuringToolExecution="true"
/>
В противном случае, все начинается параллельно, а затем медленно угасает, пока не будет выполнена exec-задача.Я не мог расшифровать логику, стоящую за этим, но, честно говоря, мне все равно.
После нескольких дней попыток и ошибок сборочная машина кричит при 100% -ной загрузке процессора, медленно спускаясь к одной долгойвыполнение задачи, а затем выполняется. Коэффициент ускорения 2,5: D