加载和替换DLL应用程序
本文关键字:应用程序 DLL 替换 加载 | 更新日期: 2023-09-27 17:50:37
我有WPF应用程序AppTest.
DllMaster1 -这只是一个带有控件的窗口。
在主应用程序中引用一个类库DllMaster1。
Window app = new DllMaster1.MainWindow();
app.ShowDialog();
app = null;
GC.Collect();
现在我需要从内存中删除一个对象,以便我可以用另一个对象替换它,因为当我想要替换DllMaster1时,我得到消息:
操作无法完成,因为其中的文件夹或文件是在另一个程序中打开
一旦Dll被加载到AppDomain中,它就不能被卸载,除非卸载整个AppDomain。您不能释放主AppDomain,因为它拥有正在执行的应用程序。解决方案是创建一个新的AppDomain并将dll加载到其中。当你完成它时,你可以卸载第二个AppDomain,这将释放对dll的锁。
在c#中使用AppDomain动态加载和卸载dll请记住,这不是一件简单的事情;有很多复杂性和微妙的行为会导致一些非常有趣的bug。
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