How to reload assembly for .NET application domain?

We load the assembly (DLL), which reads the configuration file. We need to change the configuration file and then load the assembly again. We see that after loading the assembly for the 2nd time, there are no changes in the configuration. Does anyone see what's wrong here? We did not consider reading details in the configuration file.

AppDomain subDomain; string assemblyName = "mycli"; string DomainName = "subdomain"; Type myType; Object myObject; // Load Application domain + Assembly subDomain = AppDomain.CreateDomain( DomainName, null, AppDomain.CurrentDomain.BaseDirectory, "", false); myType = myAssembly.GetType(assemblyName + ".mycli"); myObject = myAssembly.CreateInstance(assemblyName + ".mycli", false, BindingFlags.CreateInstance, null, Params, null, null); // Invoke Assembly object[] Params = new object[1]; Params[0] = value; myType.InvokeMember("myMethod", BindingFlags.InvokeMethod, null, myObject, Params); // unload Application Domain AppDomain.Unload(subDomain); // Modify configuration file: when the assembly loads, this configuration file is read in // ReLoad Application domain + Assembly // we should now see the changes made in the configuration file mentioned above 

+6
c # appdomain
source share
4 answers
+4
source share

You cannot unload an assembly after loading it. However, you can offload the AppDomain, so it’s best to load the logic into a separate AppDomain, and then when you want to reload the assembly, you have to unload the AppDomain and then reload it.

+11
source share

I believe the only way to do this is to start a new AppDomain and upload the original. So ASP.NET always handled changes to web.config.

+3
source share

If you just change some partitions, you can use ConfigurationManager.Refresh ("sectionName") to force read from disk again.

 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 when testing this process, you need to modify the application.vshost.exe.config file if you are using the VS hosting process.)

+3
source share

All Articles