2013-05-03 4 views
12

Я хотел бы знать, как выполнить следующиеweb.config преобразования во время развертывания не строить

  • сборки & пакет веб-узлы ASP.NET для файловой системы
  • Уметь развернуть веб-сайт в одну или несколько сред. Я хочу, чтобы преобразования конфигурационного файла происходили в точке развертывания, а не в точке построения. Таким образом, мой код не перекомпилируется для каждого развертывания, и не возникает риска внесения новых изменений.

Из моего собственного чтения я не уверен, как это сделать. WebDeploy, похоже, упаковывает, преобразует и развертывает на основе конфигурации, но Im unsure, как эти шаги могут быть разделены, чтобы избежать необходимости перекомпилировать код из исходного элемента управления.

Есть ли у кого-нибудь опыт в решении этой проблемы?

+0

Вы видели PackageW пакет eb NuGet? http://sedodream.com/2011/12/24/PackageOncePublishAnywhere.aspx http://nuget.org/packages/PackageWeb – tdykstra

+0

[OctopusDeploy] (https://octopusdeploy.com/) оказался большим решением для проблема, которую я пытался решить здесь. –

ответ

8

Вы можете использовать функцию параметризации веб-развертывания a.k.a MSDeploy. Вам нужно будет использовать файл parameters.xml и файл setParameters.xml для динамического изменения настроек, поскольку вы не будете преобразовывать свой пакет во время сборки.

Во время развертывания вы можете передать любой файл .xml, чтобы установить параметры, указанные вами в файле parameters.xml. Так как параметр.xml находится в корне вашего решения проекта (например, см. Ссылку на пример, куда поместить файл), то во время сборки он запекается в ваш веб-пакет. Однако теперь у вас есть возможность изменить эти значения, передав в файле setParms .xml из командной строки во время развертывания. Это отличается от преобразования значений во время сборки на основе настроек конфигурации.

Вот пример командной строки msdeploy для передачи в ParamFile для промежуточной среды.

msdeploy -verb:sync -source:package="c:\packages\mypackage.zip" -dest:auto,computername=StagingServer1 -setParamFile="c:\StagingParameters.xml" 

Смотрите ссылки ниже для примеров и MSDN технической информации:

Web Deploy Parameterization in Action

Parameterization vs. Web.Config Transformation

Web Deploy Operation Settings

Similar question on stackoverflow that provides several methods

+0

Благодаря @SoftwareCarpenter функция Parameterization имеет реальный потенциал. Вы знаете, можно ли выводить несколько файлов setParameters.xml? т.е. один для каждой среды. На этом этапе я пропускаю, как я могу опубликовать набор параметров для среды, чтобы потом можно было выбрать время развертывания. –

+0

Абсолютно, это красота этого подхода. Вы можете передать любой .xml-файл со значениями для среды, на которую вы нацеливаете время развертывания, используя параметр командной строки setParamFile. См. Обновленный ответ для уточнения и также проверьте ссылку «Параметризация веб-развертывания в действии». Надеюсь это поможет. – SoftwareCarpenter

+0

также проверьте эту ссылку, если вам все еще нужно больше объяснений: http://www.asp.net/web-forms/tutorials/deployment/web-deployment-in-the-enterprise/configuring-parameters-for-web-package -deployment – SoftwareCarpenter