Если число конфигураций является конечным и известным (тест, UAT, рабочий стол рабочего стола, рабочий мобильный телефон и т. Д.), Вы можете воспользоваться атрибутом configSource, который содержится в элементах AppSettings, ConnectionStrings и ConfigSection. Вот основная предпосылка; создайте файл AppSettings.xyz.config для каждой конфигурации, где xyz - это имя конфигурации («local», «test», «uat», «prod» и т. д.). Создайте один файл app.config, который использует определение <!ENTITY config "xyz">
и имеет атрибуты configSource для различных разделов, установленных следующим образом:
<appsettings configSource="appSettings.&config.config">
Теперь в логике развертывания вы меняете одну вещь; строковый литерал, определенный сущностью. Это изменение достаточно простое, так что вам даже не нужен синтаксический анализ XML для его внесения; просто поместите файл в память с помощью FileStream, найдите определение сущности, внесите изменения и выплюните новый контент обратно в файл. Если вы используете установщик, вы можете контролировать, какие дочерние конфигурации установлены, или просто выложить их все для простоты.