以前我们想设置全局异常处理只需要这样的代码:
1 AppDomain currentDomain = AppDomain.CurrentDomain;
2 currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyExceptionHandler);
但是在.NET Core中并没有AppDomain的相关实现,至少在.NET Core最新的发布版本里没有。
以前我和网友@SillyPGM的讨论,然后我们查看了部分Clr的源代码后发现,在AppContext类里有UnhandledException的实现代码,但是结果又一次失望,最新的代码是14天前提交的。
带着沮丧我去翻看了社区提交的ISSUES 如下: https://github.com/dotnet/corefx/issues/6398
最后发现了由SamuelEnglard提交的有关AppDomain的解决方案,经过SillyPGM的验证,证明了这个第三方库的有效性。
这个库的原理很简单就是通过反射将AppDomain类的事件字段,然后通过构建ExpressionTree生成Delegate。
原理很简单,但是包含了智慧,以后有什么搞不定的,看看源代码,如果有实现就直接照着他的方案来吧。
大家一起观摩:https://github.com/SamuelEnglard/System.AppDomain 上面有单元测试
当然也不需要把源代码Down下来自己搞,作者给咱们提供了Nuget: https://www.nuget.org/packages/System.AppDomain/2.0.11
GitHub:https://github.com/maxzhang1985/YOYOFx 如果觉还可以请Star下, 欢迎一起交流。
.NET Core 和 YOYOFx 的交流群: 214741894
|