Совместное использование строк подключения между двумя приложениями .NET

Предположим, у меня есть веб-сайт ASP.NET, работающий с соответствующим файлом web.config, который содержит набор строк подключения для доступа к базе данных. У меня также есть небольшая вспомогательная консольная программа (развернутая в той же папке, что и веб-приложение), которая выполняет задачи по обслуживанию и другие вещи. Эта вспомогательная программа использует несколько библиотек DLL с веб-приложением, поэтому мне нужно сохранить для нее отдельный файл bla.exe.config, чтобы общая DLL находила строки подключения и т. Д. Я хочу иметь возможность использовать консольное приложение. web.config вместо собственного файла конфигурации.

Пока мне удалось загрузить appSettings во время выполнения (используя ConfigurationManager.OpenMappedExeConfiguration, перебирая наборы приложений и динамически добавляя их в ConfigurationManager.AppSettings), но ConfigurationManager.ConnectionStrings, по-видимому, доступен только для чтения, поэтому я не могу« вставить »в него строки подключения web.config.

Любые идеи?


person axel_c    schedule 21.09.2009    source источник
comment
Является ли программа вспомогательной консоли частью того же решения Visual Studio? В таком случае вы можете подумать о создании файлов конфигурации с помощью сценария NANT.   -  person RichardOD    schedule 21.09.2009
comment
Идея состоит в том, чтобы иметь единый файл конфигурации, чтобы снизить затраты на обслуживание и предотвратить будущие SNAFU, вызванные различиями в файлах конфигурации.   -  person axel_c    schedule 21.09.2009


Ответы (3)


Вы можете попробовать использовать атрибут configSource раздела connectionStrings, чтобы ссылка на внешний файл. Не пробовал, но примерно так:

<connectionStrings configSource="..\connnectionstrings.config">

connectionstrings.config:

<connectionStrings>
  <add name="..." connectionString="Server=...;Database=..;" />
</connectionStrings>

Обновление:

Показанный выше подход не работает. Элемент configSource не поддерживает абсолютные или относительные пути, начинающиеся с ".. \".

person M4N    schedule 21.09.2009
comment
Я пробовал подход configSource, и, похоже, он работает. Проблема в том, что я должен поместить файл 'connectionstrings.config' непосредственно в каталог 'bin', что отстойно, но все же приемлемо. Я подожду, чтобы увидеть, появится ли лучшее решение, в противном случае я помечу его как принятый. - person axel_c; 21.09.2009

Лично я бы просто запрограммировал способ, чтобы оба приложения могли найти один и тот же файл. Я бы использовал что-то вроде Environment.SpecialFolder, используя перечисление CommonApplicationData. Вы можете рассмотреть файл machine.config хотя обычно это не рекомендуется.

person Richard Nienaber    schedule 21.09.2009

Я знаю, что это очень старый вопрос, но вы могли бы подумать о том, чтобы сохранить строки подключения в app.config библиотеки общих классов и использовать метод в приведенном ниже ответе SO, чтобы гарантировать, что файл конфигурации всегда копируется в папку bin проекта ссылки как shared.project.dll.config. Затем вы просто читаете shared.project.dll.config из папки bin ссылающегося проекта, чтобы получить строку подключения.

Visual Studio / MSBuild скопируйте app.config библиотеки классов, на которую ссылаются, как * .dll.config в папку bin текущего проекта

person theyetiman    schedule 03.08.2018