Visual Studio 2015 - событие перед сборкой, чтобы определить, какие проекты компилировать - PullRequest
0 голосов
/ 28 октября 2018

Мотивация

PreBuild для отключения компиляции избыточных проектов для ускорения цикла компиляции.

Фон

У меня есть решение VS15 ALL, которое содержит много проектов.

У меня есть один проект PreBuild, от которого зависят все остальные проектыЭто означает, что PreBuild компилируется первым.Кроме того, у нас также есть проект PostBuild, который выполняет некоторую работу после того, как двоичные файлы готовы.

Все проекты настроены на сборку в режиме Release (что желательно).Когда член команды хочет выпустить несколько двоичных файлов, он нажимает F7, Build Solution.Теперь PreBuild активирует отдельный выделенный процесс, который вычисляет, какие проекты должны быть выпущены.Характер расчета не имеет отношения к этому обсуждению.

Проблема

Из многих проектов часто бывает необходимо выпустить только несколько проектов.Однако после завершения процесса PreBuild ВСЕ проекты будут скомпилированы, что отнимает много времени.

Вопрос

Возможно ли после запуска сборки решения изменитьвыпущенные проекты?

Предлагаемые нежелательные подходы

  1. Разработчик выбирает только соответствующие проекты и только строит их.
  2. PreBuild Kill & Revive.Как только нужные проекты рассчитаны, PreBuild убивает процесс VS15 и активирует cmd, компилируя только соответствующие проекты.

Предлагаемый подход

Изменить файл ALL.sln и удалить ненужные проекты.Это сработало бы, если бы я изменил этот файл до начала процесса, но я не уверен, что он сработает, если это изменение произойдет во время процесса.

1 Ответ

0 голосов
/ 28 октября 2018

Самый простой способ, который я могу придумать, сохраняя при этом большую часть текущей инфраструктуры: иметь выделенный проект, который вызывает сборку релиза (вычисляя зависимости и вызывая msbuild) и настраивая VS, чтобы можно было выбрать только этот проектдля сборки.Все изнутри вашего ALL.sln, поэтому остальные функции остаются.Шаги:

Избавьтесь от проектов PreBuild / PostBuild.Я предполагаю, что PostBuild, который вы упоминаете, также предназначен для фактических сборок релиза;если не просто оставить его там.Обратите внимание, что не требуя, чтобы все проекты зависели от проекта PreBuild, вы уже избавились от одного бремени обслуживания.

Добавьте один единственный проект, который будет выполнять сборку релиза, скажем ReleaseBuild.Такое имя также лучше, чем проекты PreBuild / PostBuild, так как оно четко определяет цель проекта.Подойдет проект Makefile, хотя технически он может быть таким же простым, как файл msbuild с одной целью Build.Сконфигурируйте командную строку сборки так, чтобы она делала все, что нужно, т.е. выясняла, что собирать, а затем собиратьДля примера: скажем, вы используете Powershell, чтобы сделать это, вы должны настроить командную строку для сборки на

Powershell -NoProfile -File BuildRelease.ps1 $(Platform)

, а BuildRelease.ps1 содержит что-то вроде

$projectsToRelease = CalculateMyProjectsForRelease()
$platform = $Args[0]
$projectsToRelease | %{& msbuild $_ "/p:Configuration=Release;Platform=$platform"}

В Configuration Manager добавьте дополнительную конфигурацию с именем Deploy или около того.Это будет использоваться для выбора того, что собирать: у вас, вероятно, уже есть конфигурации Debug и Release.Они остаются на месте и просто используются, чтобы построить все.Идея в том, что эта дополнительная конфигурация позаботится о создании реальной версии.Это вполне соответствует стандартному способу работы в VS, и его легко обнаружить и понять новичкам.Используя флажки, сделайте так, чтобы, когда выбрана конфигурация Deploy, была собрана только ReleaseBuild и ни одна из других, тогда как при выборе Debug или Release проект ReleaseBuild не создается.Выглядит это так: enter image description here

Чтобы создать релиз, выберите Deploy в раскрывающемся меню конфигурации на панели инструментов VS и нажмите F7 (или любой другой способ вызова Build Solution).,Любые ошибки / предупреждения сборки будут проанализированы и показаны, как обычно, в списке ошибок.

Это также легко расширить: предположим, у вас есть только несколько версий сборочных выпусков, просто добавьте больше конфигураций, таких как DeployA DeployB DeployC, и настройтекомандная строка сборки для них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...