有没有办法从非托管应用程序中卸载默认的.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行李。
答案 0 :(得分:2)
此问题已在MSDN Forums上得到解答,不幸的是,这似乎无法做到,并且必须终止进程以释放包括应用域在内的资源。这在documentation for the ICLRRuntimeHost.Stop接口方法中进行了描述,其中声明“此方法不会向主机释放资源,卸载应用程序域或销毁线程。您必须终止进程才能释放这些资源。”