2

В настоящее время мой web.config выглядит примерно так:Как конвертировать configSource встраивать элементы в web.config на преобразовании

<configuration> 
    <connectionStrings configSource="connectionstrings.config"/> 
</configuration> 

При создании пакета развертывания (MSBuild.exe + цель = Package) он не «magically» параметризует мои строки подключения в файле parameters.xml для замещения при развертывании.

Когда я встраивать мой ConnectionStrings все в порядке и параметры генерируются для моих ConnectionStrings ..

Итак:

Как скопировать содержимое connectionstrings.config в качестве замены моего < ... configsource = "xxx" /> при развертывании через преобразование web.config?

EDIT: Я принял ответ Сайед Ибрагим, потому что поведение «по умолчанию» действительно хорошая (автоматическая параметризация ConnectionStrings в web.config) Но в конце концов, лучше, чтобы указать, какие именно вещи должен быть (либо через {projectname} .wpp.targets или parameters.xml файл).

ответ

6

Вы как бы задаете неправильный вопрос, не беспокойтесь о том, как преобразовать обратно в 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 и вот диалог, который отображается для параметров. enter image description here

Как вы видите, здесь показан параметр пути приложения, а также мои пользовательские значения строки подключения. Когда я обновляю значения в текстовом поле и открывая connectionStrings.config на своем веб-сервере, они были значениями, введенными в диалоговом окне.

FYI Я загрузил этот образец на свой счет github по адресу ParameterizeConStringConfig.

+1

Не нужно добавлять {projectname} .wpp.targets, который содержит подробный синтаксис MsBuild. Вы также можете добавить файл parameters.xml в webroot, синтаксис которого равен файлу parameters.xml (найденному в пакете развертывания). См. Мою учетную запись github для примера: https://github.com/crunchie84/ParameterizeConnectionStringsConfig. –

+0

Я должен был указать, что в качестве опции я также обновляю сообщение позже сегодня с подробной информацией об этом подходе. Они оба сводятся к одному и тому же (parameters.xml преобразуется в элемент MSBuild, который я показал). –

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