2011-10-19 4 views
1

奇妙な質問ですが、アプリケーションの特定のアセンブリのみから未処理の例外を処理する方法はありますが、ADO .NET例外は.NETアセンブリから発生します。特定のアセンブリからのハンドルされていない例外の処理

いくつかのアセンブリからなるモジュールに対して処理されない例外処理が必要なレガシーアプリケーションがあり、すべてが同じプロセスの一部として最終的に同じアプリケーションにあるためです。

グローバルレベルでなく、アセンブリレベルで例外をキャッチすることはできますか?

+0

デニスは、:あなたはまだ待っているあなたに役立つ以下の回答のいずれかをされました銀色の弾丸? –

答えて

2

例外を処理しない場合は、スタックトレースを確認してthrow;を使用してください。

try 
{ 
    //something 
} 
catch (Exception err) 
{ 
    if (!err.StackTrace.Contains("YourAssemblyName")) 
     throw; 
} 
+0

ええ、これも考えましたが、stacktraceにもフォルダ名が含まれていて、アセンブリと同じ名前のフォルダがあるとどうなるでしょうか? –

+0

'' YourAssemblyName ''のようなスペースを入れてください。 – jgauffin

+1

申し訳ありませんが、この場合にスペースがどのように役立つのか説明してください。 –

-1

あなたがゼロから1を書くことができますが、http://code.google.com/p/elmah/は、未処理の例外を処理するための優れたフレームワークです!

http://code.google.com/p/elmah/wiki/ErrorFilteringを使用して、リフレクションを使用してアセンブリごとにフィルタすることができます。

+0

タグを参照してください: "winforms" –

+0

おっと!私の悪い!自己へのメモ、投稿する前にすべてのタグを読む:) –

0

もちろん、分離したいアセンブリへの呼び出し回数はわからないので、これが実現可能かどうかはわかりませんが、私には話しているモジュールの周りにファサードを作成しているようですについては適切だろう。

ファサードは、これらの特定のアセンブリからスローされた例外をキャッチし、元の例外を含む例外の例外をInnerExceptionとして戻します。カスタム例外は、グローバル例外ハンドラによって簡単に認識されます。

1

いいえ、AppDomainレベルでキャッチすることはできません。変更がアプリケーションに関連している場合に試してみてください。

EDITドメインの未処理の例外:ちょうど好奇心のうち

 AppDomain otherAppDomain = AppDomain.CreateDomain("myDomain"); 
     otherAppDomain.UnhandledException += new UnhandledExceptionEventHandler(otherAppDomain_UnhandledException); 
     Assembly assembly = otherAppDomain.Load("TheAssemblyThatThrows"); 
     // But you might need to have MyClass inherit from MarshalByRefObject 
     MyClass instance = (MyClass)otherAppDomain.CreateInstanceAndUnwrap("TheAssemblyThatThrows", "MyClass"); 
     instance.DoSomething();