2016-04-07 10 views
0

Я видел несколько вопросов, читал все сообщения, но я не могу этого сделать. Либо мне что-то не хватает, либо это невозможно.Как переопределить параметры развертывания ASP.NET при публикации

Итак, у меня есть довольно простой проект (ASP.NET MVC). В корне моего проекта есть parameters.xml файл с определениями параметров, таких как:

<?xml version="1.0" encoding="utf-8" ?> 
<parameters> 
    <parameter 
    name="Realm" 
    description="Realm for ADFS authentication" 
    defaultValue="http://somewebsite"> 
    <parameterEntry 
     kind="XmlFile" 
     scope="Web.config" 
     match="/configuration/appSettings/add[@key='ida:Realm']/@value" /> 
    <parameterEntry 
     kind="XmlFile" 
     scope="Web.config" 
     match="/configuration/system.identityModel/identityConfiguration/audienceUris/add/@value" /> 
<parameterEntry 
     kind="XmlFile" 
     scope="Web.config" 
     match="/configuration/system.identityModel.services/federationConfiguration/wsFederation/@realm" /> 

до сих пор так хорошо. Эта структура очень хорошо понята, вы указали имя параметра развертывания (например, «Царство») по умолчанию для него и несколько параметров XCLT, где их можно найти в файле Web.config.

Теперь, когда я создать пакет развертывания, запустив публикации, я получаю каталог, содержащий:

  1. автогенерируемой CMD файл для развертывания
  2. риого файла
  3. манифеста XML файла
  4. Почтовый файл со всеми файлами, которые необходимо развернуть на моем сервере.
  5. .SetParameters.xml файл

Этот последний файл содержит значения параметров, которые были заданы в файле parameters.xml я цитировал выше, и эти значения устанавливаются как те, по умолчанию, которые были определены там.
, например. если значение по умолчанию для Realm было установлено на http://somewebsite, в сгенерированном SetParameters.xml развертывания, я получаю эту запись:

<setParameter name="Realm" value="http://somewebsite" /> 

Когда пакет развертывается, эти значения будут взяты из этого XML-файла и заменить значения в моем Web.Config, в соответствии с XPath, определенными в исходном файле parameter.xml.

Теперь я хочу переопределить эти параметры (как и многие другие) при создании моего пакета развертывания, поскольку мне нужны разные значения для разных профилей развертывания.

Ключ, кажется, мой файл .pubxml, который отвечает за настройки публикации. Я попробовал много вариантов, в том числе то, что сказал Сайед Хашими, here, предыдущие ответы даны here и here, here too (и другие тоже) ... ничто не может повлиять на проклятые параметры!

Я что-то упустил? Есть ли какой-то волшебный хак?
Должен ли я игнорировать параметры вообще и просто полагаться на соответствующее преобразование web.config? Любой другой совет? Может добавить пользовательские цели в файл .csproj? (даже попробовал это ...)

Спасибо! Alon.

ответ

2

WebDeploy Параметрирование происходит во время развертывания, а не времени сборки (например, преобразования конфигурации). Мы используем параметризацию для более 50 продуктов на работе с большим успехом. Для каждого продукта у нас есть 4 файла SetParameters:

  • SetParameters.DEV.XML
  • SetParameters.QA.xml
  • SetParameters.UAT.xml
  • SetParameters.PROD.xml

Каждый из них имеет значения параметров, которые действительны для окружающей среды. Мы используем скрипт PowerShell и Thoughtworks GO для выполнения MSDeploy пакета в конвейере с соответствующим файлом SetParameters.

Одно замечание, убедитесь, что не развертывать свои SetParameters файлы с приложением - http://dotnetcatch.com/2016/04/02/webdeploy-parameterization-tip-dont-publish-your-parameterization-files/

Кроме того, если вы хотите, чтобы просмотреть параметризацию в VS это может быть полезно - http://dotnetcatch.com/2014/09/08/parameterizationpreview-visual-studio-extension/

+0

Спасибо @ chief7! Я пытаюсь сократить работу и автоматизировать процесс с использованием существующих инструментов. Мне кажется, что невозможно связать набор значений параметров с профилем публикации (если только я не добавляю ручную работу вне msdeploy/build). Единственное обходное решение до сих пор: создание преобразования web.config, которое соответствует имени профиля публикации. Это не меняет web.config во время сборки, но только в выпущенном пакете развертывания. Он также более мощный, так как я могу внести фактические изменения в конфигурацию в соответствии с средой развертывания (например, различные ConfigSections для разных режимов auth). – alrotem

+1

Если вы хотите развернуть процесс сборки, вам лучше всего настроить конфигурационные преобразования. Обратите внимание, однако это потребует от вас создания для каждого развертывания среды, что повышает риск того, что кто-то проверит новое изменение между сборками и внедрит непроверенный код в верхнюю среду. Удачи! – chief7

+0

Еще раз спасибо @ chief7. Кстати, поскольку вы, кажется, более опытны в этом, чем я, предположим, что я хочу переопределить файл SetParameters.xml в папке развертывания (рядом с развернуть cmd-файл) с содержимым SetParameters.DEV.xml (так что те значения применяются во время развертывания), вы упоминаете сценарий PowerShell, так это то, как вы копируете/применяете/запускаете это? Может ли он быть каким-то образом автоматизирован из файла .pubxml при создании пакета развертывания? Мне просто очень странно, что переопределение «значений по умолчанию» в файле parameters.xml для каждого профиля публикации должно выполняться каким-то образом вручную ... – alrotem