Как создать одно место для строк подключения на всей машине?

Я обнаружил, что в Machine.config вы можете добавить свои строки подключения, чтобы вам не нужны ваши строки подключения в каждом файле конфигурации запущенных приложений. Недостатком этого является то, что у вас есть несколько версий фреймворка * 2 файла machine.config. Итак, для версии 4.* у вас есть только 2. Это потребовало моего исследования, чтобы обнаружить, что вы можете внедрить строку подключения, используя атрибут configSource в элементе connectionString файла machine.config.

<connectionStrings configSource="Config\connectionStrings.config" />

Однако следует понимать, что источник конфигурации должен находиться в подпапке, в которой находится файл machine.config. Итак, как у вас есть одно, на всю машину, место для хранения всех ваших строк подключения?


person dko    schedule 04.09.2015    source источник
comment
Допустим, у меня есть 5 приложений. Я создаю 5 инсталляций. Зачем мне иметь дело с общим местоположением строки соединения, если я могу просто хранить все в одной папке? И затем, когда я удаляю, я удаляю одну папку - одно приложение, одну строку подключения. Не нужно беспокоиться о том, что я удалю строку, которая также обслуживает другие 4 приложения.   -  person T.S.    schedule 04.09.2015
comment
Разве тогда у вас не было бы этой строки подключения в каждом из 5 app.config. У нас есть 30 веб-приложений, каждое в своем пуле приложений. Мы хотим, чтобы все они подключались к одной и той же базе данных, и, в зависимости от машины, возможно, к другой базе данных. Таким образом, нам пришлось бы хранить разные версии каждого из 30 различных файлов web.config.   -  person dko    schedule 04.09.2015
comment
Может быть, вы слишком молоды, чтобы помнить вещь под названием DLL-HELL. Давным-давно существовала идея, что общие компоненты — это хорошо. Потом разработчики поняли, что это не так. Следовательно, каждое приложение имеет свою собственную конфигурацию, свой набор DLL (в большинстве случаев). Таким образом, у вас есть 30 приложений, которые используют одну и ту же строку соединения — это работа по упаковке программного обеспечения, чтобы предоставить каждому из них соответствующую веб-конфигурацию или что-то еще.   -  person T.S.    schedule 05.09.2015
comment
Я не знаю, в чем твоя проблема. Я не рекомендую это решение всем. Для нашего случая это лучшее, что работает. У нас есть разработчики, которым мы не хотим знать строку подключения на наших производственных коробках. Да я знаю dll ад, я часто сталкиваюсь с этим. Все, что я делаю, это даю вариант дизайна. Обычно я храню строки подключения в отдельном файле app.config. В этом конкретном наборе требований, который у нас есть... это не работает. Если вы не хотите использовать это, то не делайте этого. Моя команда использовала это еще до того, как я начал работать в компании. Я просто пытаюсь поделиться тем, что я узнал.   -  person dko    schedule 06.09.2015
comment
Кроме того, файл app/web.config переопределяет файл machine.config, если они имеют одинаковое имя строки подключения.   -  person dko    schedule 06.09.2015


Ответы (1)


Я не мог найти нигде в Интернете, где был бы этот ответ. Поэтому я собираюсь ответить на это сам после некоторых экспериментов.

  1. Create a location and place your connectionstrings.config file in there. Ex. C:\Test\Connectionstrings.config
    1. In each of the machine.config locations. For example C:\Windows\Microsoft.net\Framework64\v4.*\Config. Do steps 3 and 4
    2. Откройте командную строку от имени администратора и выполните команду: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config>mklink /D Config C:\Test
    3. Измените файл machine.config на <connectionStrings configSource="Config\connectionStrings.config" />.

Теперь у вас есть одно место для всех ваших строк подключения.

person dko    schedule 04.09.2015
comment
Спасибо, что поделились своим решением. Я полностью не согласен с комментариями к исходному вопросу. У нас есть машины с более чем 100 установленными приложениями, каждая из которых имеет свой собственный набор строк подключения для каждого приложения. Теперь нам предстоит миграция базы данных. Мы не планируем обновлять более 100 приложений, так как это слишком подвержено ошибкам. Централизация является важным вариантом. - person webbexpert; 18.10.2018