Windows フォーム アプリケーションがあります。Assembly.LoadFile を使用して、拡張子が .Plugin.dll のアセンブリを読み込みます。これらの「プラグイン」の 1 つは、別のアセンブリ dll を呼び出します。その dll は最終的に ValidationException 例外をスローします。例外をスローするメソッドは、IDataErrorInfo を継承するクラスにあります。このクラスは、Linq to SQL クラス (.dbml) に含まれるクラスです。「プラグイン」では、DataContext.SubmitChanges を呼び出します。これは、try/catch ブロックにラップされています。これにより、OnValidate オーバーライドでデータベースに送信する前に、ビジネス ロジックがデータを検証します。ValidationExeption がスローされた後、デバッガーは OnValidate メソッドの最後で停止し、未処理の例外が発生したことを示しています。アプリを実行し続けると、catch ブロックが実行されます。
2 に答える
0
これを引き起こしている「実際の」例外が実際に処理されていないことは 99% 確信しています。
その後も VS でアプリを実行し続けると、デバッガーから exe を実行したときに実際に起こることではありません。実際、デバッガーは最初に未処理の例外を通知し、保留中のロジックがあれば続行します (そのため、ValidationException エラーが表示されます)。しかし、未処理の例外はまだ残っています。この動作の詳細と原因は正確にはわかりませんが、これには何度も気付きました。
unhandledexception を特定した後、unhandledexception がスローされた正確な場所で正確なエラーをキャッチする必要があります。コードサンプルを投稿すると役立つかもしれません。
于 2012-02-01T19:38:08.667 に答える
0
まず、プラグインは同じ AppDomain にありますか?
第二に、「例外がユーザーによって処理されていないときに中断する」のではなく、「例外がスローされたときに中断する」ようにデバッガーを設定しているように聞こえます。
VS.NET で、[デバッグ] --> [例外...] に移動します。
[共通言語ランタイムの例外] ノードを展開し、チェックマークが付いているかどうかを確認します。
于 2012-02-01T21:41:28.113 に答える