I want to catch the exceptions that are thrown in methods called with invoke method.
public void TestMethod()
{
   try     
   {
       method.Invoke(commandHandler, new[] { newCommand });
   }
   catch(Exception e)
   {     
       ExceptionService.SendException(e);
   }
}
method.Invoke calls the following method:
public void Register(/*parameters*/)
{
     if(test_condition())
          throw new CustomException("Exception Message");
}
The problem is that when I catch the CustomException, in the TestMethod, the e variable on the catch statement has NOT the type CustomException. It has the following message: "Exception has been thrown by the target of an invocation".
I want to catch the exception that has been raised (which is CustomException), and pass it to the ExceptionService mechanism.
What am I doing wrong?
Yes, you're calling the method via reflection. So as per the documentation, a TargetInvocationException will be thrown if the target method throws an exception.
Just use the InnerException property to obtain - and potentially throw - the original exception.
So for example:
try     
{
    method.Invoke(commandHandler, new[] { newCommand });
}
catch (TargetInvocationException e)
{     
    ExceptionService.SendException(e.InnerException);
}
来源:https://stackoverflow.com/questions/32741529/exception-has-been-thrown-by-the-target-of-an-invocation-methodbase-invoke-meth