Единственный способ - перегрузить ваш метод таким образом, который учитывает возможность исключения, а затем передать его в «на всякий случай». Следующее производит то, что я думаю, что вы ищете. Проблема, насколько я понимаю, состоит в том, что рефлексия не выполняет прямого манипулирования адресами, переданными по ссылке. Адреса не затрагиваются до тех пор, пока не будет достигнута конечная точка метода без исключения. Возможно защита памяти или схема защиты памяти от MS.
class P
{
public static void Main()
{
object[] args = { "1", new Exception()};
MethodInfo mi = typeof(P).GetMethod("Method");
try
{
mi.Invoke(null, args);
}
catch
{
}
Console.WriteLine(args[0].ToString());
Console.WriteLine(args[1].ToString());
}
public static void Method(ref string arg, ref Exception ex)
{
try
{
arg = "out value";
throw new Exception();
}
catch (Exception exc)
{
ex = exc;
}
}
}