2017-01-11 18 views
0

Я потерян. У меня есть веб-проект, который поставляется с конфигурационным файлом и несколькими параметрами, которые необходимо настроить по-разному для каждой целевой среды. У меня есть настройка приложения и строка подключения. Значения DEFINE необходимо заменить.Параметрирование Web.config не удается для одного из многих параметров при развертывании приложений Azure

Web.config:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <appSettings> 
     <add key="HostUri" value="DEFINE"/> 
     ... 
    </appSettings> 
    <connectionStrings> 
     <add name="DbConn" connectionString="DEFINE" providerName="System.Data.SqlClient"/> 
    </connectionStrings> 
    ... 
</configuration> 

У меня есть спецификация параметров которого задача Azure App Service Deploy использует позже во время развертывания. Здесь я указал оба значения, которые нужно заменить.

parameters.xml:

<parameters> 
    <parameter name="HostUri" defaultValue="Replace me!"> 
    <parameterEntry kind="XmlFile" scope="Web.config" 
     match="/configuration/appSettings/add[@key='HostUri']/@value" /> 
</parameter> 

<parameter name="DbConn" defaultValue="Replace me!"> 
    <parameterEntry kind="XmlFile" scope="Web.config" 
     match="/configuration/connectionStrings/add[@name='DbConn']/@connectionString" /> 
    </parameter> 
</parameters> 

Хотя установка HostUri приложение правильно заменить, строка соединения DbConn остается нетронутой. Я даже не получил значение по умолчанию. Он сохраняет свое значение DEFINE, как первоначально установлено в Web.config.

Извините, мне кажется, что мой XPath /configuration/connectionStrings/add[@name='DbConn']/@connectionString неверен, но он выглядит хорошо для меня и следует за другими сообщениями, такими как Cobus Bernard.

Любая помощь очень ценится.

ответ

0

Я изучил файлы журнала и обнаружил, что MSBuild обрабатывает соединения строк по-разному:

... 
Adding declared parameter 'HostUri'. 
Adding declared parameter 'DbConn'. 
Adding declared parameter 'DbConn-Web.config Connection String'. 
... 

В последней строке привело к нежелательному записи в сгенерированном файле SetParameters.xml:

... 
<setParameter name="HostUri" value="Replace me!" /> 
<setParameter name="DbConn" value="Replace me!" /> 
<setParameter name="DbConn-Web.config Connection String" value="DEFINE" /> 
... 

Так что мой XPath был прав, но эта специальная директива помещает DEFINE в мой целевой Web.config. Я нашел два решения этого, в первую очередь на основе этого SO вопроса: How to Publish Web with msbuild?

1) Tweak вашего файл проект

Разгрузка вам веб-проект, редактировать файл проект и добавить в нужной конфигурации следующая строки:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <!-- Add this line: -- 
    <AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings> 
    ... 
</PropertyGroup> 

Процесс сборки подберет это и прекратит обрабатывать соединительные строки специальными.

Я считаю это решение слишком скрытые и люди забывают, так что альтернатива немного более явным:

2) Настройка MSBuild

Pass явный аргумент MSBuild, когда релиз пакета будет построен:

msbuild /P:Configuration=Release;AutoParameterizationWebConfigConnectionStrings=false;...