Я заметил, что функция отладки «Только мой код»/«Брейк при необработанных исключениях» не работает при динамическом вызове метода с использованием .net Framework 4.0 или выше. Если я изменю проект, чтобы использовать фреймворк 3.5, он будет работать нормально.
Учитывая этот пример приложения командной строки:
using System;
namespace InvokeFail
{
class Program
{
static void Main(string[] args)
{
HandledExceptions();
}
public static void HandledExceptions()
{
try
{
Fail();
}
catch (NotImplementedException)
{
// handle it amazingly well
}
try
{
InvokeFail();
}
catch (NotImplementedException)
{
// handle it amazingly well
}
}
private static void Fail()
{
throw new NotImplementedException();
}
private static void InvokeFail()
{
try
{
typeof(Program).GetMethod("Fail", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static)
.Invoke(null, null);
}
catch (System.Reflection.TargetInvocationException ex)
{
throw ex.InnerException;
}
}
}
}
И эти параметры отладки VS:
Вот изображение, где останавливается отладчик, и его стек вызовов: