Сценарий для каждого продукта звучит как путь. Вы также можете рассмотреть возможность использования любого количества общих или базовых сценариев для импорта общих шагов сборки. Например, Майк Чалий уже упоминал, что вы можете использовать Импорт в скрипте сборки вашего продукта:
<Import Project="..\Shared\Base.proj" />
Еще одна вещь, которой вы также можете воспользоваться, это переопределение цели и свойства. Это похоже на переопределение виртуальных методов в классе .Net. См. документацию и MSBuild Team Blog для получения более подробной информации. Я знаю, что довольно часто этим пользуюсь, устанавливая значения по умолчанию во включенных скриптах, затем переопределяя их по мере необходимости в скрипте сборки продукта, чтобы настроить поведение сборки. Например, я часто генерировал файлы, которые требуются перед сборкой, поэтому я подключаю эти цели в группу свойств BuildDependsOn. Таким образом, мои сгенерированные файлы генерируются всякий раз, когда я делаю F5
из IDE, вызываю цель сборки из командной строки или иным образом собираю проект или решение. Очевидно, что если у вас есть какие-либо шаги сборки, которые выполняются долго или должны выполняться только в особых обстоятельствах (например, сборщики сборки), вам нужно позаботиться о том, что именно подключается.