Как использовать командную строку 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 для развертывания проекта веб-сайта без предварительной компиляции?
Ответы
Ответ 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 с правами администратора.