Замените элементы web config * * параметрами msdeploy

Мы используем msdeploy (или веб-развертывание, если хотите) для упаковки и развертывания веб-приложений. Объявляя время пакета параметров, мы можем предоставить значения во время развертывания (для замены строк соединения между прочим).

В настоящее время мы сталкиваемся с проблемой замены значений в разделах applicationSettings в нашей веб-конфигурации. Мы не можем заставить msdeploy заменять значение, потому что содержимое, которое мы хотим заменить, - это текст внутри элемента xml, а не значение атрибута (предупреждение, которое мы получаем: "Невозможно установить значение в node типа" Элемент "").

Соответствующая конфигурация выглядит следующим образом:

<applicationSettings>
  <Name.Of.Assembly.Properties.Settings>
    <setting name="someSetting" serializeAs="String">
      <value>I wanna be replaced</value>
    </setting>
  </Name.Of.Assembly.Properties.Settings>
</applicationSettings>

а параметр объявления xml выглядит следующим образом:

<parameter name="XX" defaultValue="default">
  <parameterEntry kind="XmlFile"
                       scope="Web\.config$"
                       match="/configuration/applicationSettings/Name.Of.Assembly.Properties.Settings/setting[@name='someSetting']/value" />
</parameter>

Поддерживает ли msdeploy только замену значений атрибутов или я делаю что-то неправильно?

Ответ 1

Для потомков...

Вам просто нужно добавить "/text()" до конца матча. Это изменит значение, заключенное в теги. Однако это значение не может быть пустым в исходном файле web.config. Поэтому, когда вы создаете пакет развертывания с помощью конфигурации решения "Release", web.Release.config не должен устанавливать это значение параметра в пустые значения.

<parameter name="XX" defaultValue="default">
  <parameterEntry kind="XmlFile"
                       scope="Web\.config$"
                       match="/configuration/applicationSettings/Name.Of.Assembly.Properties.Settings/setting[@name='someSetting']/value/text()" />
</parameter>