Я должен перезагрузить конфигурационный файл после изменения его. Как это может быть сделано с помощью appdomains? Пример кода был бы полезен.
ConfigurationManager.RefreshSection
может сработать для вас.
Да, это возможно ... в зависимости от КАК вы получаете доступ к файлу конфигурации.
Если вы полагаетесь на поведение по умолчанию, то ответ будет НЕТ .
Однако, если вы обращаетесь к конфигурации через статическое
свойство метода, общего для вашего проекта, то его можно перезагрузить.
Сейчас у меня нет фрагмента кода, но я сделал нечто подобное, даже используя FileSystemWatcher
для обнаружения изменений в файле конфигурации
.
Есть одно предостережение: он работает только со свойствами, доступ к которым вы получаете напрямую через свой код, автоматическая конфигурация не будет перезагружена, когда вы это сделаете.
Я действительно нашел решение данной проблемы. Ниже приведены несколько строк кода, показывающих, как это можно сделать:
AppDomainSetup domaininfo = new AppDomainSetup();
domaininfo.ApplicationBase = System.Environment.CurrentDirectory;
domaininfo.ConfigurationFile = "Target_Config.exe.config";
Evidence adevidence = AppDomain.CurrentDomain.Evidence;
AppDomain dom = AppDomain.CreateDomain("test", adevidence, domaininfo);
var someType =(SomeType)dom.CreateInstanceAndUnwrap("Target_Assembly",
"Target_Assembly.SomeType");
Ключевым моментом здесь является класс AppDomainSetup, который позволяет установить свойство файла конфигурации для создаваемой сборки. Теперь мы можем отслеживать изменения в файле конфигурации Target_Config.exe.config. При его изменении созданный выше домен приложения должен быть выгружен, а затем создан заново.