Как сказать MSBuild публиковать множество веб-проектов в одном каталоге? - PullRequest
6 голосов
/ 22 декабря 2010

Я запускаю автоматическую сборку с TFS 2010. В решении у меня есть несколько веб-приложений, которые расположены в одном корневом каталоге, например:

RootDir ->

   WebApplicationProject1.csproj
   WebApplicationProject2.csproj
   ...

Когда я запускаю автоматическую сборку, я задаю следующие аргументы для MSBuild:

/ p: DeployOnBuild = true; DeployTarget = PipelinePreDeployCopyAllFilesToOneFolder; _PackageTempDir = "\ computer \ Builds \ Опубликовать" / p: SkipnSer = =1008 *

Однако MSBuild не сохраняет существующее содержимое в этой папке, и с каждым проектом содержимое в этой папке удаляется.Последний проект, который будет создан, является победителем.

Могу ли я заставить MSBuild не удалять содержимое этой папки и заменять только существующие файлы?

Спасибо за любую информацию по этому вопросу.

Ответы [ 4 ]

1 голос
/ 07 января 2011

Вам необходимо сообщить MSBuild о ваших нескольких целях

Попробуйте

<Target Name="Build" DependsOnTargets="T1, T2">
</Target>

MSBuild позволяет вам определять цель по умолчанию и позволяет вам определять зависимости между вашими целями.Если значение по умолчанию не определено, выполняется первый найденный файл.Используя DefaultTargets, вы можете вызвать несколько:

<Project DefaultTargets="T1;T2">

Цель должна выполнить все одно четко определенное действие.Например, цель Clean удалит все необходимые файлы и папки, необходимые для очистки проекта.Компиляция скомпилирует все библиотеки DLL и т. Д.

Ваши цели обычно должны объявлять свои собственные зависимости:

<Target Name="CI" DependsOnTargets="T1, T2">
</Target>

В противном случае ваша цель должна содержать все отдельные шаги, которые вы хотите выполнить:

<Target Name="XX">
    <CallTarget Targets="T1"/>
    <CallTarget Targets="T2"/>
</Target>

если вы все еще сталкиваетесь с путаницей, посмотрите эту ссылку

1 голос
/ 04 января 2011

Вам не нужно создавать несколько конфигураций сборки. Просто определите решение, которое содержит оба проекта, создайте определение сборки для этого решения и добавьте цель AfterDropBuild, которая копирует все из выходных подпапок ОпубликованоWebservices в общую папку.

0 голосов
/ 04 января 2011

Кажется, именно так Microsoft и хочет. Я нашел то же самое, чтобы быть правдой в VS2008. Сборка проекта уничтожит всю папку, включая .svn.

Мое решение - создать событие после сборки, чтобы скопировать файлы из каждого места в общую папку. Это не идеально, но работает без каких-либо серьезных зависаний, которые я нашел.

0 голосов
/ 29 декабря 2010

Вы можете собрать их все в отдельные папки, а затем скопировать все результаты в окончательную папку.Если файлы имеют одинаковые имена, они, вероятно, будут испорчены, но так будет, если вы все равно сможете напрямую собрать их все в одну папку.

...