Как построить несколько проектов в решении, каждый проект с другой целью? - PullRequest
1 голос
/ 01 февраля 2012

Я работаю с решением VS2010, которое имеет несколько проектов (обычные сборки, проект ASP.NET MVC, проект Windows Azure и проект SQL).Я пытаюсь выяснить, как настроить определение сборки TFS для развертывания как проекта Windows Azure, так и проекта SQL.

Я знаю, как выполнить развертывание Windows Azure, и у меня есть настраиваемая задача сборки в файле проекта Windows Azure (.ccproj), которая выполняет развертывание.Я легко могу создать определение сборки, которое запускается для файла .ccproj, передавая в качестве параметров некоторые аргументы командной строки MSBuild и работая как положено.

Я могу создать другое определение сборки, которое запускается для проекта SQL (.sqlproj), передавая MSBuild цели сборки и параметры, необходимые для сборки и публикации проекта SQL.Это работает как ожидалось.

Как два разных определения сборки, что у меня работает.Достаточно просто.

Что мне еще предстоит выяснить, так это объединить эти два определения сборки в одно.Это вообще возможно (без большой работы)?В идеале я бы смог запустить новую сборку, которая будет собирать проекты и развертывать их оба (так же, как они представляют собой отдельные определения сборки) как часть единой единицы работы.

Я пытался использоватьфайл решения в качестве элемента для сборки и указание целей сборки в виде / t: : ; : .Но, очевидно, этот синтаксис работает только для целей в базовом наборе, а не для любых пользовательских целей или импортированных из других файлов .targets (или, как я понимаю).

Каков наилучший (самый простой) способ выполнениячто я хочу сделать?

1 Ответ

3 голосов
/ 02 февраля 2012

Конечно, вы можете сделать это полностью! По сути, вам нужно иметь цель в каждом проекте с таким же именем. Затем вы меняете список DependsOn для каждого, чтобы включить в него список целей проекта. Пример:

Проект 1:

 <Target Name="MyBuild" DependsOnTargets="AzureTarget1,AzureTarget2" />

Проект 2:

 <Target Name="MyBuild" DependsOnTargets="SQLTarget1,SQLTarget2" />

Затем вы можете указать определению сборки, чтобы построить цель MyBuild для каждой, и она должна вызвать соответствующие цели DependsOn.

Это очень простой пример того, как это сделать, но вы можете сделать его гораздо более надежным, если вы также используете проекты MSBuild Traversal и задачу обхода MSBuild, очень похожие на метод, описанный в следующей статье в разделе «Создание большого источника» Деревья "раздел:

http://msdn.microsoft.com/en-us/magazine/dd483291.aspx#id0100082

...