Я пишу веб-приложение на C# /. NET, которое я хочу отправить с дополнительными утилитами, документацией и другими материалами. Поэтому я бы предпочел, чтобы структура папок выглядела следующим образом.
C:\Program Files\MyApp\
│ config.yml
│
├───Services
│ WindowsService.exe
│
├───Tools
│ AnotherTool.exe
│ Utility.exe
│
└───Web
web.config
Само веб-приложение переходит в каталог Web
, а остальные размещаются в папках-соседях веб-приложения. В настоящее время он использует обычный файл web.config
для хранения своей конфигурации, включая, например, строки подключения.
Поскольку некоторым другим инструментам и службам также требуется доступ к файлу конфигурации приложения, я подумал о разбиении web.config
в отдельные файлы - в зависимости от их ответственности. Это означает, что я хотел бы, чтобы общая информация о конфигурации хранилась в общем файле, например, config.yml
, config.xml
или app.config
в каталоге root приложения. Затем этот файл содержит информацию о конфигурации, которая необходима во всех частях приложения, тогда как web.config
предоставляет только конфигурацию, необходимую для веб-части приложения. Другие инструменты и сервисы теперь могут получать доступ к конфигурации приложения без необходимости загружать конфигурацию веб-части.
Сейчас я пытаюсь выбрать лучшее решение для загрузки веб-приложения, которое общий файл конфигурации. Я бы предпочел вариант с использованием пользовательского раздела в web.config
, который просто ссылается на его родительский каталог.
<MyApp configSource="..\app.config" />
К сожалению, этот не разрешен по соображениям безопасности, я думаю.
Затем я подумал о том, чтобы загрузить файл конфигурации самостоятельно из XML или YML-файла, который связан с web.config
. Но это связано с рядом проблем, таких как
- Нет автоматов c Перезапуск приложения при изменении файла конфигурации
- Ручные, поточно-ориентированные определения изменений файлов для меня выглядят "грязными", например, с использованием
FileSystemWatcher
или проверка файла на модификацию при каждом запросе - Не используется. NET предусмотренные механизмы по умолчанию
Есть ли лучший способ для создания архитектуры файла конфигурации, подобной этой