更新: Microsoft Connect でバグ レポートを提出しました: https://connect.microsoft.com/VisualStudio/feedback/details/568271/debugger-halting-on-exception-thrown-inside-methodinfo-invoke#details
お使いのマシンでこの問題を再現できる場合は、修正できるようにバグに賛成票を投じてください!
OK、いくつかのテストを行い、問題を非常に単純なものに減らしました。
私。例外をスローする新しいクラスにメソッドを作成します。
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 ブロックにブレークポイントを置いても、到達する前に停止します!)
実際、デバッガーなしで実行すると例外が発生します。単純なテスト プロジェクトでは、他のレベルでは無視されますが、アプリに何らかの種類のグローバルな例外処理がある場合は、そこでもトリガーされます。 [コメントを見る]
これは、デバッグしようとする苦痛は言うまでもなく、アプリのクラッシュハンドラーをトリガーし続けるため、本当に頭痛の種です。