Вы как бы задаете неправильный вопрос, не беспокойтесь о том, как преобразовать обратно в web.config. Вместо этого просто создайте параметры для строк подключения в файле, где они должны быть. Я просто написал это в http://sedodream.com/2012/05/13/VSWebPublishHowToParameterizeConnectionStringsOutsideOfWebconfig.aspx. Я также вставил содержимое ниже для вас.
Если вы использовали веб-публикацию Visual Studio в VS 2010 или VS 11 для создания пакетов Web Deploy, вы, вероятно, знаете, что мы автоматически настраиваем строки подключения в web.config. Если вы не знакомы с параметрами Web Deploy, это способ объявить, что вы хотите легко обновить значение чего-то при публикации пакета позже. Строки подключения - хорошие примеры того, что обычно необходимо обновлять во время публикации.
Как я уже говорил, если вы создаете пакет Web Deploy в Visual Studio, мы автоматически создадим параметры веб-развертывания для всех ваших строк подключения в web.config. Раньше сегодня я видел question on StackOverflow asking how to parameterize connection strings in non-web.config files (вопрос действительно спросил что-то еще, но я думаю, что это то, чего он действительно хочет). Я создал образец, показывающий, как это сделать. Ниже приведен пример элемента connectionStrings в web.config.
<connectionStrings configSource="connectionStrings.config" />
А вот connectionStrings.config
<connectionStrings>
<clear/>
<add name="ApplicationServices"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
<add name="OtherConnectionString"
connectionString="data source=.\SQLExpress;Integrated Security=SSPI;Initial Catalog=foo"
providerName="System.Data.SqlClient"/>
</connectionStrings>
Для параметрирования этих строк подключения вам придется расширить веб-публикацию трубопровода. Для этого создайте файл с именем {project-name} .wpp.targets в корне проекта, в котором вы работаете (для проектов VS 11 вы можете разместить все это непосредственно внутри файлов .pubxml). Это будет файл MSBuild, который будет импортирован в процесс сборки/публикации. Ниже находится файл, который необходимо создать.
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<!-- Here we need to declare MSDeploy parameters for connection strings in connectionStrings.config -->
<MsDeployDeclareParameters Include="ApplicationServices-ConnectionString" >
<Kind>XmlFile</Kind>
<Scope>connectionStrings.config$</Scope>
<Match>/connectionStrings/add[@name='ApplicationServices']/@connectionString</Match>
<Description>Connection string for ApplicationServices</Description>
<DefaultValue>data source=(localhost);Initial Catalog=AppServices</DefaultValue>
<Tags>SqlConnectionString</Tags>
</MsDeployDeclareParameters>
<MsDeployDeclareParameters Include="OtherConnectionString-ConnectionString" >
<Kind>XmlFile</Kind>
<Scope>connectionStrings.config$</Scope>
<Match>/connectionStrings/add[@name='OtherConnectionString']/@connectionString</Match>
<Description>Connection string for OtherConnectionString</Description>
<DefaultValue>data source=(localhost);Initial Catalog=OtherDb</DefaultValue>
<Tags>SqlConnectionString</Tags>
</MsDeployDeclareParameters>
</ItemGroup>
</Project>
Здесь вы можете видеть, что я создаю значения для MSDeployDeclareParameters. Когда вы упаковываете/публикуете этот список элементов, используется для создания параметров MSDeploy. Ниже приведено описание значений метаданных, каждый из которых содержит.
- Kind = для этого случая он всегда будет XMLFILE, learn more
- Scope = регулярное выражение в файл, который должен быть изменен
- Match = выражение XPath для атрибута/элемента, который будет обновлен
- Описание = Необязательное описание (это будет отображаться в диспетчере IIS, если упак импортируется)
- DefaultValue = необязательное значение по умолчанию для для параметра Метки = необязательный, для строки подключения используйте SqlConnectionString
После создания этого файла вам необходимо закрыть/повторно открыть VS (он кэширует импортированные файлы .targets). Затем вы можете создать пакет развертывания в Интернете. Когда вы это сделаете, будут объявлены новые параметры. В моем случае я импортировал это в диспетчер IIS и вот диалог, который отображается для параметров.
Как вы видите, здесь показан параметр пути приложения, а также мои пользовательские значения строки подключения. Когда я обновляю значения в текстовом поле и открывая connectionStrings.config на своем веб-сервере, они были значениями, введенными в диалоговом окне.
FYI Я загрузил этот образец на свой счет github по адресу ParameterizeConStringConfig.
Не нужно добавлять {projectname} .wpp.targets, который содержит подробный синтаксис MsBuild. Вы также можете добавить файл parameters.xml в webroot, синтаксис которого равен файлу parameters.xml (найденному в пакете развертывания). См. Мою учетную запись github для примера: https://github.com/crunchie84/ParameterizeConnectionStringsConfig. –
Я должен был указать, что в качестве опции я также обновляю сообщение позже сегодня с подробной информацией об этом подходе. Они оба сводятся к одному и тому же (parameters.xml преобразуется в элемент MSBuild, который я показал). –