Вам нужно построить два шага или использовать встроенные задачи.Двухэтапная сборка включает в себя разбиение вашей сборки на цель «Настроить», которая предварительно строит ваши задачи сборки, и цель «CoreBuild», которая выполняет вашу сборку.
Используя любой из приведенных ниже методов, вы должны убедиться, чтоЦель "Confugure" не требует каких-либо пользовательских задач, которые она построила.
1) Используйте цель "Build" для запуска двухэтапной сборки:
<Target Name="Configure">
<MSBuild Projects="PathTo/CustomBuidTasks.csproj" Target="Build" />
</Target>
<Target Name="CoreBuild">
<MSBuild Projects="@(ItemsToBuild)" Target="Build" />
</Target>
<Target Name="Build">
<MSBuild Projects="$(MSBuildThisFile)" Target="Configure" />
<MSBuild Projects="$(MSBuildThisFile)" Target="CoreBuild" />
</Target>
2)Настройте свою систему CI для выполнения двухэтапной сборки за вас, по сути дублируя вышеперечисленное с использованием рабочего процесса CI, сначала запустив MSBuild с целью «Configure», затем отдельно выполнив более традиционную цель «Build».* 3) Другой подход заключается в использовании встроенных задач в MSBuild.Поместив код задачи в файл MSBuild, механизм скомпилирует его для вас при первом выполнении задачи.
Извлечено из MSBuild Trickery трюки # 6 и # 32