即使我卸载 appdomain,我的 dll 也不会卸载

Posted

技术标签:

【中文标题】即使我卸载 appdomain,我的 dll 也不会卸载【英文标题】:My dll won't unload even when i unload appdomain 【发布时间】:2016-05-16 16:26:47 【问题描述】:

我不明白为什么在我执行 AppDomain.Unload 后我的 DLL 仍然在程序的内存中。我可以做错什么吗?

AppDomain appDomain = AppDomain.CreateDomain("MyAuthDomain");
appDomain.DoCallBack(load_Auth);

var isLogin = (bool)appDomain.GetData("IsLogin");

AppDomain.Unload(appDomain);

private static void load_Auth()

    var form = new Compiler(File.ReadAllBytes(Environment.CurrentDirectory + @"\form.dll"), "form");
    form.InvokeMember("ShowDialog");

    AppDomain.CurrentDomain.SetData("IsLogin", (bool)form.GetField("IsLogin")); 
    form.Unload();

附言 我如何理解 DLL 保留在内存中? NETUnpack 告诉我。

【问题讨论】:

【参考方案1】:

这对我有帮助

AppDomain.Unload(appDomain);

//GC
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();

【讨论】:

以上是关于即使我卸载 appdomain,我的 dll 也不会卸载的主要内容,如果未能解决你的问题,请参考以下文章

卸载后 AppDomain 和使用的 DLL 的问题

vb.net编程,如何使用 appdomain 实现某进程DLL动态加载和卸载?

AppDomain 卷影副本 - 加载/卸载动态加载的 Dll

AppDomain 支持在 UnityEngine 中已失效,有啥方法可以卸载 dll?

C# AppDomain 无法加载 DLL

使用AppDomain进行动态加载和卸载dll