【问题标题】:Closed DLL still shows in GetAssemblies() list (.NET)已关闭的 DLL 仍显示在 GetAssemblies() 列表 (.NET) 中
【发布时间】:2016-10-17 20:02:54
【问题描述】:

我的项目调用带有 UI 的(未引用的)DLL 项目。最终用户应该在关闭主表单(主项目)之前关闭此表单,但有时他们不会。

我尝试使用 AppDomain.GetAssemblies() 来查看 DLL 表单是否已关闭。但是,即使我关闭 DLL 表单,它仍会显示在 GetAssemblies 列表中。我的猜测是它会一直保留在记忆中吗?!

在允许关闭我的主项目之前,确保所有从主项目加载的 DLLS 都被卸载并释放到内存中的最佳做法是什么?

【问题讨论】:

    标签: c# .net vb.net dll


    【解决方案1】:

    在 .Net 中卸载程序集的唯一方法是卸载它被加载到的 AppDomain。这意味着您需要将其他程序集加载到它们自己的应用程序域中,但是,这会带来额外的复杂性,因为您将无法在应用程序域之间共享数据,并且必须使用进程间通信技术从加载的程序集中调用方法进入另一个 AppDomain。根据您的要求,您可能必须从 MarshalByRefObject 继承您的类或将它们设为 [Serializable]。

    本主题中提供了一些其他信息和示例:How to Load an Assembly to AppDomain with all references recursively?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      相关资源
      最近更新 更多