В случае строк подключения действительно возможно указать на общий файл. Если общий файл находится в сети UNC, он требует прав администратора на компьютере, на котором будет размещено приложение.
Решение. В файле web.config используйте configSource для указания на локальный файл конфигурации. Из-за ограничений .Net это должно быть на уровне или ниже уровня корневого файла конфигурации. Я просто указываю на файл в самой папке приложения:
<connectionStrings configSource="ConnectionStrings.config" />
В общедоступном месте, которое доступно пользователю пула приложений, добавьте файл конфигурации, содержащий строки общего подключения. Этот файл не должен содержать никаких XML, кроме самого раздела connectionStrings. Общий файл ConnectionStrings.config выглядит следующим образом:
<connectionStrings>
<clear/>
<add name="connString1" connectionString="connString1 info goes here"/>
<add name="connString2" connectionString="connString2 info goes here"/>
</connectionStrings>
Теперь уловка. Создайте символическую ссылку Windows в папке приложения, указывающую на внешний общий файл конфигурации. Для этого вам потребуются права администратора:
mklink ConnectionStrings.config \\someServer\someShare\someFolder\ConnectionStrings.config
Мы только что перехитрили .Net. Система конфигурации будет использовать настройку configSource для поиска строк подключения в локальном файле ConnectionStrings.config. Символическая ссылка выглядит как файл для .Net, а символическая ссылка преобразуется в общий файл конфигурации.
Предупреждения: изменения в общем файле не вызывают автоматического перезапуска приложения в .Net. В случае IIS веб-сайт или пул приложений необходимо будет перезапустить вручную.
Из-за необходимости административных привилегий для создания символической ссылки этот подход может работать не для всех. Есть две связанные альтернативы, которые могут работать, если общий файл находится на одном логическом диске - жесткие ссылки и соединения. См. это обсуждение и это обсуждение для получения дополнительной информации.