Изменение файла web.config на основе переменной среды в ASP.NET - PullRequest
10 голосов
/ 17 июля 2009

Мне нужно изменить строку подключения в файле web.config на основе переменной среды (для различных сред, таких как dev / staging / production и т. Д.). Я видел другие решения, использующие задачи сборки для изменения различных конфигураций, но не смог найти что-то, что позволило бы мне изменить строку подключения на основе переменной среды. Кто-нибудь знает какой-либо способ сделать это?

Ответы [ 4 ]

8 голосов
/ 17 июля 2009

Мы используем атрибут configSource для элементов appSettings и connectionStrings в web.config.

По сути, у нас один и тот же файл web.config для всех наших сред: dev, qa и production.

Затем мы используем отдельные "специфичные для среды" файлы .. Например ...

В web.config:

<?xml version="1.0"?>
<configuration>
  <appSettings configSource="local.appsettings.config" />
  <connectionStrings configSource="local.connectionstrings.config" />
</configuration>

Затем мы поддерживаем следующие файлы:

local.appsettings.config.development
local.appsettings.config.qa
local.appsettings.config.production
local.connectionstrings.config.development
local.connectionstrings.config.qa
local.connectionstrings.config.production

Поскольку мы предварительно компилируем все наши приложения asp.net перед развертыванием, у нас есть настраиваемая задача msBuild, используемая нашим решением CI, которая копирует нужные файлы конфигурации (в зависимости от целевой среды) в правильный файл .config ...

Итак, если мы развертываем в dev, local.appsettings.config.development -> local.appsettings.config

Если мы развертываем в qa, local.appsettings.config.qa -> local.appsettings.config

Это позволяет нам сохранять основной файл web.config одинаковым во всех наших средах.

2 голосов
/ 17 июля 2009

Как насчет наличия двух строк подключения и другой переменной, например "isTesting" в вашем файле web.config, в зависимости от значения isTesting выберите, какую строку подключения использовать?

0 голосов
/ 22 февраля 2010

Вы можете установить web.config для каждой среды в менеджере конфигурации, используя события предварительной сборки. Я пробовал это с отличными результатами.

http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx

Когда у вас есть отладка и сборка, вы можете иметь местный / подготовительный / производственный ... и т. Д.

0 голосов
/ 17 июля 2009

Вы также можете использовать разделы конфигурации, и на основе переключения имени сервера между разделами. таким образом, вы можете иметь одинаковые ключи.

текст ссылки

...