我的项目使用UI调用(未引用的)DLL项目。最终用户应该在关闭主表单(主项目)之前关闭此表单,但有时他们不会。
我尝试使用AppDomain.GetAssemblies()来查看DLL表单是否已关闭。但是,即使我关闭DLL表单,它仍然显示在GetAssemblies列表中。我的猜测是它留在记忆中直到某一点?!
在允许关闭主项目之前,确保主项目中所有已加载的DLLS都已卸载并在内存中释放的最佳做法是什么?
答案 0 :(得分:3)
在.Net中卸载程序集的唯一方法是卸载它加载到的AppDomain。这意味着您需要将其他程序集加载到自己的应用程序域中然而,这会带来额外的复杂性,因为您将无法在应用程序域之间共享数据,并且必须使用进程间通信技术从已加载的程序集中调用方法进入另一个AppDomain。根据您的要求,您可能必须从MarshalByRefObject继承您的类或使它们[Serializable]。
本主题提供了一些其他信息和示例:How to Load an Assembly to AppDomain with all references recursively?