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, и результаты были точно такими же, как и любые другие рабочие параметры, но, как правило, это не изменилось.
Кто-нибудь видит что-то очевидное, я здесь отсутствует?
Ответы
Ответ 1
service_Address
Я нашел ответ на эту проблему здесь:
Заменить элементы web.config с помощью MSDeploy
Мне не хватало "text()" в конце выражения XPath, правильный XPath:
/configuration/applicationSettings/aim.Web.Properties.Settings/setting[@name='aim_Web_AddressService_Address']/value/text()
customErrorsMode
Для проблемы customErrorsMode у меня не было имени '/' в начале моего выражения XPath. Правильное выражение:
/configuration/system.web/customErrors/@mode
ConnectionStrings
Этот действительно дошел до меня, это был последний, который я понял. После небольшого рытья я обнаружил, что 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;" />