2010-07-15 3 views
19

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

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

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

<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 параметр DECLARE выглядит следующим образом:

<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 поддерживает только замена значений атрибутов или я делаю что-то не так?

ответ

40

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

Вам просто нужно добавить «/ текст()» до конца матча. Это изменит значение, заключенное в теги. Однако это значение не может быть пустым в исходном файле 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> 
+0

Полезно, спасибо! Попробуй. –

+2

Работал для меня --- the/text() - это то, чего мне не хватало. Не xpath pro. Это должно быть отмечено как ответ. Спасибо Дэйву. – TravisWhidden

+1

Согласен с @TravisWhidden - это должно быть отмечено как правильный ответ. – Philippe

Смежные вопросы