не найдено

я есть много методов, которые вызывают с помощьюDelegate.DynamicInvoke, Некоторые из этих методов делают вызовы базы данных, и я хотел бы иметь возможность пойматьSqlException и не ловиTargetInvocationException и поохотиться по его внутренностям, чтобы найти то, что на самом деле пошло не так.

Я использовал этот метод для отбрасывания, но он очищает трассировку стека:

 try
 {
      return myDelegate.DynamicInvoke(args);
 }
 catch(TargetInvocationException ex)
 {
     Func<TargetInvocationException, Exception> 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 = new ObjectManager(null, ctx);
    var si = new SerializationInfo(e.GetType(), new FormatterConverter());

    e.GetObjectData(si, ctx);
    mgr.RegisterObject(e, 1, si);
    mgr.DoFixups(); 
}

Ответы на вопрос(1)

Ваш ответ на вопрос