Перезагрузка файла конфигурации.NET

Я должен перезагрузить конфигурационный файл после изменения его. Как это может быть сделано с помощью appdomains? Пример кода был бы полезен.

8
задан johnnyRose 1 November 2016 в 13:48
поделиться

3 ответа

ConfigurationManager.RefreshSection может сработать для вас.

9
ответ дан 5 December 2019 в 07:34
поделиться

Да, это возможно ... в зависимости от КАК вы получаете доступ к файлу конфигурации.

Если вы полагаетесь на поведение по умолчанию, то ответ будет НЕТ .

Однако, если вы обращаетесь к конфигурации через статическое свойство метода, общего для вашего проекта, то его можно перезагрузить.

Сейчас у меня нет фрагмента кода, но я сделал нечто подобное, даже используя FileSystemWatcher для обнаружения изменений в файле конфигурации .

Есть одно предостережение: он работает только со свойствами, доступ к которым вы получаете напрямую через свой код, автоматическая конфигурация не будет перезагружена, когда вы это сделаете.

1
ответ дан 5 December 2019 в 07:34
поделиться

Я действительно нашел решение данной проблемы. Ниже приведены несколько строк кода, показывающих, как это можно сделать:

            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. При его изменении созданный выше домен приложения должен быть выгружен, а затем создан заново.

0
ответ дан 5 December 2019 в 07:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: