【发布时间】:2016-09-22 01:22:52
【问题描述】:
在我的 C# .Net 4.0 项目中,我使用 AppDomains 加载插件程序集,让它们工作,然后卸载 AppDomain,这样我就不必将程序集保留在主进程中。
对于一个特定的插件,当我调用AppDomain.Unload() 时,我会得到一个CannotUnloadAppDomainException。我发现这很可能是因为插件在catch 或finally 块中启动了一个后台线程,该线程要么被卡住,要么花费很长时间(~10 秒)。不幸的是,我不知道线程在哪里。
这只发生在客户的机器上,所以我无法使用调试器提供帮助。但是,如果我能找到更有用的东西来写出,我可以给他们一个补丁来将更多信息写入日志文件。
我有插件程序集的源代码,我一直在尝试做一些静态分析并运行一些测试,但它非常大,我没有运气找到它卡在 @987654325 的地方@ 或finally。
我的问题:
有没有什么方法可以在获得
CannotUnloadAppDomainException时获得在子 AppDomain 中使用其调用堆栈运行的线程列表?除了
catch和finally块之外,还有其他代码段可以抛出此异常吗?
【问题讨论】: