Обновление: Я зарегистрировал отчет об ошибке в Microsoft Connect: https://connect.microsoft.com/VisualStudio/feedback/details/568271/debugger-halting-on-exception-thrown-inside-methodinfo-invoke#details
Если вы можете воспроизвести эту проблему на своем компьютере, пожалуйста, отсканируйте ошибку, чтобы она могла быть исправлена!
Хорошо, я провел некоторое тестирование, и я решил проблему просто:
я. Создайте метод в новом классе, который генерирует исключение:
public class Class1 {
public void CallMe() {
string blah = null;
blah.ToLower();
}
}
II. Создайте MethodInfo, который указывает на этот метод где-то еще:
Type class1 = typeof( Class1 );
Class1 obj = new Class1();
MethodInfo method = class1.GetMethod( "CallMe" );
III. Оберните вызов Invoke() в блок try/catch:
try {
method.Invoke( obj, null ); // exception is not being caught!
} catch {
}
IV. Запустите программу без отладчика (отлично работает).
v. Теперь запустите программу с помощью отладчика. Отладчик остановит программу, когда произойдет исключение, даже если оно завершено обработчиком catch, который пытается игнорировать его. (Даже если вы поместите контрольную точку в блок catch, она остановится, прежде чем она ее достигнет!)
Фактически, исключение происходит, когда вы запускаете его без отладчика. В простом тестовом проекте его игнорируют на каком-то другом уровне, но если ваше приложение имеет любую глобальную обработку исключений, оно также будет запущено там. [см. Комментарии]
Это вызывает у меня настоящую головную боль, потому что он продолжает запускать мой обработчик сбоя приложения, не говоря уже о болью, которую нужно попытаться отладить.