MSDeploy setParameter не работает

Мы пытаемся интегрировать модель «собери один раз, разверни где угодно» в нашу систему сборки-развертывания.

MSDeploy прекрасно справляется с этой задачей, значительно сокращая время сборки за счет сравнения контрольных сумм CRC и (по большей части) так же хорошо работает при использовании параметризации для изменения web.configs приложений в зависимости от среды, в которой мы развертываем .

У меня есть большинство этих параметров, но некоторые элементы и атрибуты никогда не меняются, независимо от того, сколько разных способов я называю их в файле parameters.xml. Я привел три примера этого, вот файл web.config, который я пытаюсь изменить:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <connectionStrings>
        <add name="DbConnectionString" connectionString="Data Source=null;Initial Catalog=null;Trusted_Connection=no;User ID=user1;Password=pass*9;" providerName="System.Data.SqlClient" />
    </connectionStrings>

    <system.web>
        <customErrors mode="On" defaultRedirect="/Library/Error/PageNotFound.aspx">
        </customErrors>
    </system.web>

    <applicationSettings>
        <settings>
            <setting name="service_Address" serializeAs="String">
                    <value></value>
            </setting>
        <settings>
    </applicationSettings>
</configuration>

Вот файл parameters.xml:

<parameter name="DbConnectionString" defaultValue="">
    <parameterEntry kind="XmlFile" scope="\\web.config$" match="/configuration/connectionStrings/add[@name='DbConnectionString']/@connectionString" />
</parameter>

<parameter name="customErrorsMode" defaultValue="">
    <parameterEntry kind="XmlFile" scope="\\web.config$" match="configuration/system.web/customErrors/@mode" />
</parameter>

<parameter name="service_Address" defaultValue="">
    <parameterEntry kind="XmlFile" scope="\\web.config$" match="/configuration/applicationSettings/aim.Web.Properties.Settings/setting[@name='service_Address']/value" />
</parameter>

А вот и соответствующий файл setParameters.xml:

<setParameter name="DbConnectionString" value="Data Source=dbserver;Initial Catalog=DB1;Trusted_Connection=no;User ID=user1;Password=pass*9;"/> 

<setParameter name="customErrorsMode" value="Off"/>

<setParameter name="service_Address" value="https://myservice.asmx"/>

Я протестировал каждое выражение XPath, и результаты точно такие же, как и для любых других рабочих параметров, но вышеприведенное, кажется, никогда не меняется.

Кто-нибудь видит что-то очевидное, что мне здесь не хватает?


person ShaneC    schedule 26.06.2014    source источник


Ответы (1)


service_Address

Я нашел ответ на эту проблему здесь:

Замените элементы web.config на MSDeploy

Мне не хватало «text()» в конце выражения XPath, правильный XPath:

/configuration/applicationSettings/aim.Web.Properties.Settings/setting[@name='ai‌​m_Web_AddressService_Address']/value/text()


customErrorsMode

Что касается проблемы customErrorsMode, мне не хватало символа «/» в начале выражения XPath. Правильное выражение:

/configuration/system.web/customErrors/@mode  


строки подключения

Это действительно зацепило меня, это было последнее, что я понял. Немного покопавшись, я обнаружил, что MSDeploy автоматически параметризует определенные элементы, одним из которых является строка подключения, подробнее здесь:

Настройка параметров для развертывания веб-пакетов

Мое объявление параметра для рассматриваемой строки подключения должно было быть:

<parameter name="DbConnectionString-Web.config Connection String" defaultValue="">
    <parameterEntry kind="XmlFile" scope="\\web.config$" match="/configuration/connectionStrings/add[@name='DbConnectionString']" />
</parameter>

Мое определение setParameter должно было выглядеть так:

<setParameter name="DbConnectionString-Web.config Connection String" value="Data Source=dbserver;Initial Catalog=DB1;Trusted_Connection=no;User ID=user1;Password=pass*9;" />
person ShaneC    schedule 27.06.2014
comment
Очень полезно при отладке веб-развертывания AppVeyor: help.appveyor.com/ обсуждения/проблемы/ - person Dave Mateer; 12.03.2015
comment
Очень полезно, я застрял с моими строками подключения, которые не были заменены. Спасибо ! - person John-Philip; 03.07.2015
comment
Спасибо, что так красиво все собрали. Если вы хотите заменить только пароль в строке подключения, вы можете вставить Password={Password}; в web.config удалите строку подключения из файла SetParameters.xml и вместо этого используйте ‹setParameter name=Password value=secret /› - person tobbenb3; 02.03.2017
comment
@ tobbenb3 - я не вижу никакой документации по тому, что вы описали. У вас есть ссылка? - person fml; 01.03.2018
comment
что такое target.Web.Properties.Settings? и есть ли документ MS для перевода XDT в конфигурацию parameters.xml? - person red888; 10.04.2018