当我加载的另一个AppDomain抛出未处理的异常时,我可以隔离当前的AppDomain吗?

Cas*_*sen 7 .net c# appdomain

可能是以下副本:我可以阻止其他AppDomain中未捕获的异常关闭应用程序吗?

一直在努力找出这个问题的答案.

只是想确保答案确实没有,在我扔掉所有代码之前,我将其驱动程序隔离在他们独立的应用程序域中并用旧式流程替换它.

所以正式的问题是这个.

我有一个默认域名"ad-default",我在其中创建了一个新的appdomain"ad-hosted",我可以避免"ad-hosted"中未处理的例外情况会删除"ad-default"吗?

我知道我可以通过连接到"广告托管"域的UnhandledException事件来观察异常,但我找不到阻止它们传播到"ad-default"域的方法.

这是真的吗?但是,如果他们不提供隔离,为什么我们甚至会想要AppDomain呢?

编辑:遗憾的是答案没有,请参阅此答案进行解释: AppDomain,处理异常

Cas*_*sen 4

将另一个应用程序域中的线程中的异常与拆除默认域隔离的唯一方法是使用:

 <runtime>
    <legacyUnhandledExceptionPolicy enabled="1"/>
 <runtime>
Run Code Online (Sandbox Code Playgroud)

这会将未处理异常的 IsTerminate 标志设置为 false,并防止默认域关闭。

在我们的例子中,我们所做的就是连接到两个域中的 UnhandledExceptionHandler。然后,我们在“ad-hosted”中触发一个 semafore,该信号将被“ad-default”中为此目的创建的线程拾取,然后依次处理“ad-hosted”

这是一个黑客行为,可能不会在框架的未来几代中保留下来,但它使“广告默认”更加强大,因为它不会因“广告托管”中未处理的异常而被拆除

我们还在“ad-default”中连接一个事件处理程序,它将把发送者转换为应用程序域,并检查异常是否源自“ad-default”,如果是,我们也拆除“ad-default”,模拟.net的行为2.0,即使具有上述运行时设置。

希望这能为某人提供有关如何制作更具弹性的插件主机的线索。