Споделяне на низове за връзка между 2 .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
Идеята е да имате един конфигурационен файл, за да намалите разходите за поддръжка и да предотвратите бъдещи SNAFUs, причинени от разлики в конфигурационните файлове.   -  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