Существуют ли хорошие шаблоны для сопоставления конфигураций решений в средах и использования MsDeploy для упаковки на среду?
Кратчайшая версия: Возьмите этот файл и попробуйте изменить файл .msbuild, чтобы создать пакет.
Подробнее
У меня есть решение с большим количеством библиотек и ASP.NET MVC. Я управляю сборкой файлом msbuild, который вызывает основное решение, а затем выполняет другие действия. Я хочу использовать новую упаковку msdeploy для подготовки .zip файла для последующего распространения, но у меня возникают различные трудности.
Мое решение имеет 4 конфигурации: Local
, Dev
, Test
и Prod
, которые соответствуют средам, к которым я хочу привязать. В этом решении все библиотеки имеют Debug
и Release
режимы, как обычно. Например, в режиме решения Local
все библиотеки компилируются в режиме Debug
. Затем основное приложение имеет соответствующие среды с решением, так что я могу иметь Web.Dev.config
и т.д., Что кажется естественным способом использования вещей.
Если я упакую следующим образом:
<Target Name="BuildWebPackage">
<MSBuild Projects="..\Publisher\Site\Site.vbproj"
Targets="Package"/>
</Target>
Я получаю проблему, когда Configuration=Local
неправильно сопоставляется с библиотечными проектами, ссылки на Site.vbproj
и не могут их скомпилировать.
Я вижу два возможных решения: один я не могу работать правильно, а другой очень уродлив.
Попытка 1
Я пытаюсь вызвать цель Package
через решение (в этом примере "Приложения" - это папка с решением, в которой находится проект сайта... Я упростил эту статью для этого сообщения, потому что на самом деле существует несколько приложений в решении.)
<Target Name="BuildWebPackage">
<MSBuild Projects="..\Publisher\Publisher.sln"
Targets="Applications\Site:Package"/>
</Target>
Я думаю, что этот синтаксис SolutionFolder\ProjectName:Target
заключается в том, как это сделать, потому что :Clean
работает... однако, это бросает
error MSB4057: The target "Applications\Site:Package" does not exist in the project.
Попытка 2
Теперь для уродливого решения: он работает, если я изменяю ВСЕ мои библиотеки, чтобы иметь 4 дополнительных конфигурации для этих 4 конфигураций решения. Тем не менее, это уродливый и действительно плохой план, если я хочу совместно разработать общую библиотеку позже с проектом, который имеет разные среды. Кроме того, эти среды не имеют ничего общего с библиотекой и имеют смысл только в контексте приложений верхнего уровня, использующих библиотеки. Вкус плохо.
А?
Мне нравится иметь несколько сред в решении и новые материалы замены Web.config, но я не знаю, как вызвать задачу msdeploy Package
в этой ситуации, чтобы я мог создать пакет в TeamCity.
(Обратите внимание, что я, вероятно, НЕ хочу вызывать командную строку msdeploy, потому что это использовало для превращения приложения IIS в пакет. Не то, что я здесь делаю.)
Пример
Опять же, я был полностью в тупике, поэтому, если вы хотите помочь экспериментировать, я собрал это примерное решение.