Как обрабатывать различные конфигурации для каждого проекта при выполнении автоматических сборок? - PullRequest
3 голосов
/ 06 декабря 2011

После более глубокого погружения в наследование конфигурации сборки возникает следующий вопрос: как мне обращаться с конфигурациями сборки, которые существуют только для некоторых пакетов?

Сборка из командной строки выглядела так:

msbuild ..\lib\Package1.dproj /target:Build /p:config=%1
msbuild ..\lib\Package2.dproj /target:Build /p:config=%1
msbuild ..\lib\Package3.dproj /target:Build /p:config=%1

Параметр config был либо Debug, либо Release. Это сработало хорошо.

Теперь некоторые пакеты получили новые конфигурации сборки, такие как Release_Child_Config (которая наследуется от Release в моем случае). Теперь мне нужно сделать (например,):

msbuild ..\lib\Package1.dproj /target:Build /p:config=Release_Child_Config
msbuild ..\lib\Package2.dproj /target:Build /p:config=Release_Child_Config
msbuild ..\lib\Package3.dproj /target:Build /p:config=Release

В этом примере Package3 не имеет конфигурации сборки с именем Release_Child_Config. Это означает, что я больше не могу использовать один config параметр.

Я хочу, чтобы все пакеты, имеющие специальную конфигурацию сборки Release_Child_Config, собирались с ним, остальные должны возвращаться к Release. Можно ли это как-то автоматизировать? Или мне нужно создавать каждую конфигурацию сборки для каждого пакета?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2011

Пока что-то лучше, вот мое временное решение: генерировать пакетные команды с помощью скрипта.

  • Ввод скрипта: список проектов для сборки
  • Ввод скрипта: пакетный файл, содержащийКоманды сборки для каждого проекта

Сценарий просматривает каждый из файлов проекта (.dproj) и выполняет простой поиск строки.Если он находит Release_Child_Config, он записывает это в командный файл:

  msbuild ..\lib\Package1.dproj /target:Build /p:config=Release_Child_Config

Если нет, он возвращается к следующему:

  msbuild ..\lib\Package1.dproj /target:Build /p:config=Release

Конечно, скрипт делает немного большеон также может использоваться для аналогичных случаев Debug, Debug_Child_Config и т. д. Пока он выполняет свою работу и вписывается в цепочку сборки.

0 голосов
/ 06 декабря 2011

Попробуйте использовать обе конфигурации.Если один из них не включен, сборка должна быть пропущена:

msbuild ..\lib\Package1.dproj /target:Build /p:config="Release_Child_Config;Release"
msbuild ..\lib\Package2.dproj /target:Build /p:config="Release_Child_Config;Release"
msbuild ..\lib\Package3.dproj /target:Build /p:config="Release_Child_Config;Release"

или изменить порядок конфигурации на «Release; Release_Child_Config» (релиз будет собираться первым)

...