c# - 在新的 AppDomain 中调用库以防止异常传播

标签 c# appdomain

我正在使用不稳定的第三方库,它会在我无法捕获的内部线程上抛出异常。我正在尝试将库沙盒化到一个单独的 AppDomain 中,这样异常就不会导致我的应用程序宕机,这样我就可以实现重试逻辑。

这是我到目前为止所得到的,但它似乎是在默认的 AppDomain 上执行的。该异常使应用程序崩溃。

var ad = AppDomain.CreateDomain("Sandbox");
ad.UnhandledException += (o, e) =>
{
    Console.WriteLine("Who Cares");
};

dynamic lib = ad.CreateInstance("TestLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "TestLibrary.TestLibrary").Unwrap();
lib.DoWork();

最佳答案

试试这个方法:

var ad = AppDomain.CreateDomain("Sandbox");
ad.UnhandledException += (o, e) =>
{
    Console.WriteLine("Who Cares");
};
ad.Load("TestLibrary.TestLibrary");
ad.DoCallBack(() =>
{
     TestLibrary lib = new TestLibrary();
     lib.DoWork();
});

因为当您打开该类型时,它也会加载到主应用程序域中。使用这种方法都将保留在其他 AppDomain 中。接下来,您可以返回到您的主应用域一些简单的可编码结果。

关于c# - 在新的 AppDomain 中调用库以防止异常传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30874301/

相关文章:

c# - 从另一个应用程序域返回的对象可以在调用域中序列化吗?

ASP.NET 数据缓存 - 应用域重启后保留内容

c# - 如何强制关闭运行它自己的线程的后台 worker

c# - netpeertcpbinding 是否支持请求/回复

c# - 我如何从 C# 打印点阵字体的文本?

c# - 如何避免 SerializationException : Type is not resolved for member XXX when testing a component that uses the LogicalCallContext

c# - 沙箱 AppDomain 跨程序集异常处理

c# - 是否有 System.Text.StringBuilder 的二进制等价物?

c# - ProgressBar 的颜色没有改变 c#

c# - CI 构建定义中的新 .net Core Visual Studio 2017 项目 nuget 恢复