Как переопределить параметры развертывания 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" />

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

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

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

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

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

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

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

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

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

Спасибо! Алон.

1 ответ

Решение

Параметризация 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/

Другие вопросы по тегам