Мы используем атрибут 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 одинаковым во всех наших средах.
Как насчет наличия двух строк подключения и другой переменной, например « isTesting
» в вашем web.config, а затем на основе значения isTesting
pick какую строку подключения использовать?
вы также можете использовать разделы конфигурации и в зависимости от имени сервера переключаться между разделами. таким образом вы можете иметь одинаковые имена ключей.
Вы можете установить web.config для каждой среды в менеджере конфигурации, используя события предварительной сборки. Я попробовал это с отличными результатами.
http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx
Когда у вас есть debug и build, вы можете иметь local/preproduction/production... etc