Подтвердить что ты не робот

Как использовать командную строку msbuild для развертывания проекта веб-сайта VS2012 без предварительной компиляции?

Я унаследовал очень большой проект веб-сайта VS2012 (а не веб-приложение) и пытаюсь автоматизировать его развертывание. Есть тонны круговых ссылок в проекте, чтобы заставить его предварительно скомпилировать с помощью aspnet_compiler.exe. Мне нужно включить фиксированные имена. Проблема в том, что это заставляет сборку занимать около 20 минут на моем четырехъядерном ядре, 16 ГБ оперативной памяти, ssd-машине разработчика. Предыдущему разработчику не пришлось иметь дело с этим, поскольку он просто скопировал весь источник на веб-сервер производства.

Итак, прежде чем решать проблему круговых ссылок, я хочу, по крайней мере, автоматически развернуть проект, используя msdeploy. Я могу использовать профили публикации в visual studio, и он делает именно то, что я хочу:

  • Создает ссылочную DLL и добавляет их в проект.
  • Преобразует ли web.config.
  • Даже не пытаюсь создать сайт, а просто пакеты в zip файл для меня.

То, что я не могу понять для жизни, - это то, как заставить MSBuild.exe делать то же самое!

MSBuild.exe WebProject.vs2012.sln /m /T:Build 
    /p:Configuration=Release`;DeployOnBuild=true`;PublishProfile=TestDeploy

Вышеприведенная команда по-прежнему пытается выполнить aspnet_compiler, чего я не хочу. Профиль публикации говорит, что он не должен быть предварительно скомпилирован... но в журналах я вижу, что он выполняет его.

Итак: как я могу использовать msbuild для развертывания проекта веб-сайта без предварительной компиляции?

4b9b3361

Ответ 1

Для проекта веб-сайта процесс публикации не привязан к процессу сборки. Для веб-сайта, поскольку нет формального процесса сборки, нам нечего было действительно расширять.

Примечание: ниже для этого требуется VS 2012 (или VS2010, если на то пошло), и Azure SDK. Функции не были включены в окончание RTM VS2012.

После создания профиля публикации в VS создается следующее:

  • Опубликовать профиль (файл .pubxml) в разделе App_Data/PublishProfiles
  • A website.publishproj в корне сайта

Цель website.publishproj - облегчить публикацию командной строки. Это заполнение для .csproj/.vbproj, которое вы обычно получаете при использовании проекта веб-приложения.

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

msbuild.exe website.publishproj /p:DeployOnBuild=true 
   /p:PublishProfile=<profile-name-no-extension> /p:VisualStudioVersion=11.0

Вам не нужно указывать, какие цели были вызваны.

Относительно сообщения в VS, что сайт предварительно скомпилирован, это ошибка. Он проходит предварительную компиляцию, но публикация использует настройку в профиле. Эта ошибка должна быть исправлена ​​в Visual Studio Update 1. После установки вы не должны видеть ненужный шаг предварительной компиляции. Пожалуйста, дайте мне знать, если вы все еще видите это.

Ответ 2

В то время как ответ Sayed Ibrahim Hashimi помог мне немного, вот что я нашел необходимым для VS2012:

После установки Azure SDK я создал профиль публикации файла, который создал папку PublishProfiles в папке Properties моего проекта. Внутри этой новой папки создаются два xml файла с именами my_sample_PublishProfile_Foo.pubxml и my_sample_PublishProfile_Foo.pubxml.user.

Используя .pubxml, я могу опубликовать с помощью msbuild следующим образом:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe "C:\...\UI.csproj" /p:DeployOnBuild=true /p:PublishProfile="C:\...\PublishProfiles\my_sample_PublishProfile_Foo.pubxml"  /p:VisualStudioVersion=11.0

Не забудьте запустить пакетный файл, содержащий этот script с правами администратора.