How to reload an assembly for a .NET Application Domain?

后端 未结 4 1332
鱼传尺愫
鱼传尺愫 2020-12-10 16:53

We are loading an assembly (a DLL) which reads a configuration file. We need to change the configuration file and then re-load the assembly. We see that after loading the a

相关标签:
4条回答
  • 2020-12-10 17:36

    If you are just changing some sections you can use ConfigurationManager.Refresh("sectionName") to force a re-read from disk.

    static void Main(string[] args)
        {
            var data = new Data();
            var list = new List<Parent>();
            list.Add(new Parent().Set(data));
    
            var configValue = ConfigurationManager.AppSettings["TestKey"];
            Console.WriteLine(configValue);
    
            Console.WriteLine("Update the config file ...");
            Console.ReadKey();
    
            configValue = ConfigurationManager.AppSettings["TestKey"];
            Console.WriteLine("Before refresh: {0}", configValue);
    
            ConfigurationManager.RefreshSection("appSettings");
    
            configValue = ConfigurationManager.AppSettings["TestKey"];
            Console.WriteLine("After refresh: {0}", configValue);
    
            Console.ReadKey();
        }
    

    (Note that you have to change the application.vshost.exe.config file if you are using the VS hosting process, when testing this.)

    0 讨论(0)
  • 2020-12-10 17:41

    You can't unload an assembly once it's been loaded. However, you can unload an AppDomain, so your best bet would be to load the logic into a separate AppDomain and then when you want to reload the assembly you'll have to unload the AppDomain and then reload it.

    0 讨论(0)
  • 2020-12-10 17:43

    Please see the following 2 links for an answer:

    • Dynamic Plugins by Jon Shemitz
    • Using AppDomain to load and unload dynamic assemblies by Steve Holstad
    0 讨论(0)
  • 2020-12-10 17:50

    I believe the only way to do this is to start a new AppDomain and unload the original one. This is how ASP.NET has always handled changes to web.config.

    0 讨论(0)
提交回复
热议问题