【问题标题】:How to unload the default .NET AppDomain from an unmanaged application如何从非托管应用程序中卸载默认的 .NET AppDomain
【发布时间】:2010-02-24 23:10:43
【问题描述】:

有没有办法从非托管应用程序中卸载默认的 .NET AppDomain?

我正在使用名为 .NET Extender 的第三方工具来使用 Visual FoxPro 中的 .NET 程序集,它允许我托管 .NET 控件并在 FoxPro 环境中使用 .NET 类和方法。

我遇到的问题是,当从 Visual FoxPro 中调试应用程序时,它会运行 IDE 的主 vfp9.exe 应用程序文件下的所有内容,并且似乎没有释放我的托管程序集的句柄。因此,当我对这些 .NET 程序集进行更改并想要更新它们时,我必须关闭 VFP IDE 并重新打开它,否则在尝试覆盖文件时会出现共享冲突。

我开始寻找确保释放控件的方法,但后来我遇到了this article by Rick Strahl,他基本上描述了问题实际上是主 AppDomain 没有卸载。在查看了有关如何卸载默认 AppDomain 的信息后,我得出的结论是,这至少在托管应用程序中是不可能的,但对于非托管应用程序是可能的。我的想法是,仅仅因为非托管应用程序使用了 .NET 资源,它就不必继续携带 AppDomain 和 Runtime 包袱。

【问题讨论】:

标签: assemblies unmanaged appdomain foxpro


【解决方案1】:

这个问题在MSDN Forums 上得到了回答,不幸的是,这似乎是不可能的,必须终止进程才能释放包括应用程序域在内的资源。这在documentation for the ICLRRuntimeHost.Stop 接口方法中进行了描述,其中声明“此方法不会向主机释放资源、卸载应用程序域或破坏线程。您必须终止进程才能释放这些资源。”

【讨论】:

    猜你喜欢
    • 2015-04-07
    • 1970-01-01
    • 2010-09-12
    • 2010-11-28
    • 1970-01-01
    • 2011-02-20
    • 2012-11-06
    • 1970-01-01
    相关资源
    最近更新 更多