У випадку рядків підключення дійсно можна вказати на спільний файл. Якщо спільний файл знаходиться в мережі 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 веб-сайт або пул програм потрібно буде перезапустити вручну.
Через необхідність адміністративних привілеїв для створення символічного посилання, цей підхід може працювати не для всіх. Є дві пов’язані альтернативи, які можуть працювати, якщо спільний файл знаходиться на одному логічному диску - жорсткі посилання та розв’язки. Дивіться цю дискусію та цю дискусію для отримання додаткової інформації.