Мы используем атрибут 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 одинаковым во всех наших средах.