我有WPF应用程序AppTest。
DllMaster1 - 这只是一个带控件的窗口。
在主应用程序中引用类库DllMaster1。
Window app = new DllMaster1.MainWindow();
app.ShowDialog();
app = null;
GC.Collect();
现在我需要从内存中删除一个对象,以便我可以用另一个替换他,因为当我想要替换DllMaster1时,我收到消息:
无法完成操作,因为文件夹或其中的文件是 在另一个程序中打开。
答案 0 :(得分:0)
将Dll加载到AppDomain后,如果不卸载整个AppDomain,则无法卸载它。您无法释放主AppDomain,因为它是拥有正在执行的应用程序的AppDomain。解决方案是创建一个新的AppDomain并在其中加载dll。完成后,您可以卸载第二个AppDomain,它将释放dll上的锁。
您可以在此处找到代码:Using AppDomain in C# to dynamically load and unload dll
请记住,这不是一件简单的事情;有很多复杂性,微妙的行为可能会导致一些非常有趣的错误。
答案 1 :(得分:0)
AppDomain appDomain = AppDomain.CreateDomain("appDomain");
Assembly a = appDomain.Load("DllMaster1");
Type myType = a.GetType("DllMaster1.MainWindow");
MethodInfo myMethod = myType.GetMethod("MyMethod");
object obj = Activator.CreateInstance(myType);
myMethod.Invoke(obj, null);
AppDomain.Unload(appDomain);
MyMethod
是DllMaster1 this.Show();
中的新方法。卸载不起作用,我仍然无法删除DLL。