C
Colin Svingen
Hello. I'm trying to reload a shadow copied DLL after it changes. I'm
loading it in a separate AppDomain, but it also gets loaded in my main
AppDomain, so when I unload my AppDomain, it still exists in the main
AppDomain.
<snip>
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationName = "Runner";
setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
setup.PrivateBinPath = AppDomain.CurrentDomain.BaseDirectory;
setup.ShadowCopyDirectories = AppDomain.CurrentDomain.BaseDirectory;
setup.ShadowCopyFiles = "true";
setup.CachePath = AppDomain.CurrentDomain.BaseDirectory + "Bin";
AppDomain domain = AppDomain.CreateDomain("RunnerDomain", null, setup);
Assembly ass = domain.Load("Utilities");
Type lType = ass.GetType("Utilities.Gender");
int val = (int)Enum.Parse(lType, "Male");
MessageBox.Show(val.ToString());
AppDomain.Unload(domain);
</snip>
As soon as I call the line:
Type lType = ass.GetType("Utilities.Gender");
My exe's AppDomain loads the Utilities DLL too. So when I unload my
AppDomain, and load it again it keeps the old values from the
Enumeration instead of loading the new one. I am confused. How do I
write my code so that only my RunnerDomain has a copy of Utilities.dll
loaded?
TIA,
Colin Svingen
loading it in a separate AppDomain, but it also gets loaded in my main
AppDomain, so when I unload my AppDomain, it still exists in the main
AppDomain.
<snip>
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationName = "Runner";
setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
setup.PrivateBinPath = AppDomain.CurrentDomain.BaseDirectory;
setup.ShadowCopyDirectories = AppDomain.CurrentDomain.BaseDirectory;
setup.ShadowCopyFiles = "true";
setup.CachePath = AppDomain.CurrentDomain.BaseDirectory + "Bin";
AppDomain domain = AppDomain.CreateDomain("RunnerDomain", null, setup);
Assembly ass = domain.Load("Utilities");
Type lType = ass.GetType("Utilities.Gender");
int val = (int)Enum.Parse(lType, "Male");
MessageBox.Show(val.ToString());
AppDomain.Unload(domain);
</snip>
As soon as I call the line:
Type lType = ass.GetType("Utilities.Gender");
My exe's AppDomain loads the Utilities DLL too. So when I unload my
AppDomain, and load it again it keeps the old values from the
Enumeration instead of loading the new one. I am confused. How do I
write my code so that only my RunnerDomain has a copy of Utilities.dll
loaded?
TIA,
Colin Svingen