8

私はC#プロジェクトに取り組んでおり、UnhandledExceptionイベントを利用して、プロジェクトで見逃した可能性のある例外をキャッチしたいと考えています(同じ側にいる以外に存在しないことを望んでいます)。

私はかなりのソフトウェアを作成しているので、すべてのプロジェクトで使用できるクラスライブラリを作成したいので、コピーして貼り付けることなく、すべてのプロジェクトの初期化作業をすべて実行する1つの関数が必要です。同じ作業を行うために各プロジェクトにコードを記述します。

私が疑問に思っているのは、次のコードを使用して、クラスライブラリに未処理の例外イベントがあるかどうかです。

AppDomain currentDomain = AppDomain.CurrentDomain;
            currentDomain.UnhandledException += new UnhandledExceptionEventHandler(currentDomain_UnhandledException);

未処理の例外はクラスライブラリ内からのみ使用されますか、それともこのイベントハンドルは、クラスライブラリを参照するすべてのプロジェクトからも実行されますか。

あなたが提供できるどんな助けにも感謝します。

4

2 に答える 2

5

すべてのプロジェクトが同じappdomainで実行されていると仮定すると、これは正しく機能します。この正確なコードは、多数のアプリケーション間で共有される共通のDLLにカプセル化されています。

追加の提案:これがWindowsフォームアプリケーションで使用されている場合は、System.Windows.Forms.Application.ThreadExceptionのハンドラーも追加することをお勧めします。これは、たとえば、誰かが制御イベントに例外処理を追加するのを忘れた場合のバックストップとして機能します。

于 2013-01-05T02:00:48.087 に答える
1

アセンブリを別のアプリケーションドメインにロードすることは可能ですが、アセンブリ(クラスライブラリなど)を現在のアプリケーションドメインにロードする限り、これで例外が処理されます。

アプリケーションドメインとアセンブリの関係:

http://technet.microsoft.com/en-us/subscriptions/index/43wc4hhs(v=vs.80).aspx

たとえば、Assembly.LoadFile()またはAssembly.Load()アセンブリを現在のアプリドメインにロードします。

あなたのコードは、次のような新しいアプリドメインを作成している可能性があります。

AppDomain.CreateDomain(..)、次に、アセンブリをこのドメインにロードする可能性がありますが、これはコードでは処理されません。

プロジェクトでライブラリを参照すると、それらは現在のアプリドメインに読み込まれます。

于 2013-01-05T02:04:31.913 に答える