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
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.)
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.
Please see the following 2 links for an answer:
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.