Я пишу систему конфигурации, в которой файл app.config динамически создается из различных фрагментов конфигурации, распределенных в нескольких местах. В настоящее время система работает следующим образом:
- Загрузчик создает файл конфигурации.
- Загрузчик инициализирует новый домен приложений с новым файлом конфигурации в качестве файла конфигурации.
- В результате новый домен приложений настроен на использование нового файла конфигурации, и все работает нормально.
Мы хотели бы отойти от этого подхода, состоящего из нескольких доменов приложений; он добавляет уровень сложности, особенно когда речь идет о неуправляемых библиотеках и другом устаревшем коде.
При переходе к одному домену приложений рабочий процесс изменится на:
- Загрузчик создает файл конфигурации.
- Загрузчик объединяет файл конфигурации в свой собственный файл конфигурации.
- Загрузчик обновляет кеш ConfigurationManager.
- Загрузчик запускает основное приложение в том же домене приложений.
Похоже, ConfigurationManager кеширует разделы в памяти. Так, например, если я прочитал AppSettings до шага №3, я должен позвонить: ConfigurationManager.RefreshSection("appSettings");
Фактически, я должен убедиться, что любой раздел, который был использован загрузчиком, обновлен.
Я могу перебрать все разделы конфигурации в новом файле конфигурации и принудительно обновить их, но это заставляет диспетчер конфигурации загружать любые сборки, указанные в файле конфигурации. Я бы хотел отложить это, если возможно. Есть ли способ аннулировать то, что ConfigurationManager в настоящее время хранит в памяти?