Tag: 内部exception

如何在不丢失堆栈跟踪的情况下重新抛出TargetInvocationException的内部exception

我有许多使用Delegate.DynamicInvoke调用的方法。 其中一些方法进行数据库调用,我希望能够捕获TargetInvocationException并且不捕获TargetInvocationException并通过其内部搜索来查找实际出错的地方。 我正在使用此方法重新抛出,但它清除了堆栈跟踪: try { return myDelegate.DynamicInvoke(args); } catch(TargetInvocationException ex) { Func getInner = null; getInner = delegate(TargetInvocationException e) { if (e.InnerException is TargetInvocationException) return getInner((TargetInvocationException) e.InnerException); return e.InnerException; }; Exception inner = getInner(ex); inner.PreserveStackTrace(); throw inner; } PreserveStackTrace方法是我修复的扩展方法,感谢另一篇文章(我不知道它实际上做了什么)。 但是,这似乎不会保留跟踪: public static void PreserveStackTrace(this Exception e) { var ctx = new StreamingContext(StreamingContextStates.CrossAppDomain); var mgr = […]