1

まず、私のシナリオでは、プラグインはアプリの起動時に読み込まれ、アプリが閉じるまでアンロードされないため、読み込まれた後にアンロードできなくてもまったく問題ありません。

したがって、プラグインを独自の AppDomain にロードすると、プラグインがクラッシュした場合にアプリケーションが保護されることはわかっていますが、プラグインがアンマネージ コードを実行しないと仮定すると、プラグインへの呼び出しを try/catch ブロックでラップすることはできません。アプリのクラッシュ?それとも、ここで何か不足していますか?

これを行うために MAF を使用しようとしていましたが、オブジェクトのリモート処理で問題が発生しています。つまり、それらをリモート可能にするために私が持っている利用可能なオプションのどれも、現時点では非常に望ましいとは思えません。したがって、より原始的なプラグイン アーキテクチャに切り替える前に、別の AppDomain にプラグインをロードする必要がある他の重要な理由を忘れていないか (または、単純にクラッシュを回避できると誤解しているかどうかを誰かに教えてもらえますか?呼び出しの周りに try/catch ブロックを使用する)?

4

1 に答える 1

1

それらをアンロードする必要がない場合は、個別の AppDomains は必要ありません。

AppDomains は、未処理の例外が発生した場合にプロセスが強制終了されるのを防ぎません。new Thread(() => { throw null; }).Start()はまだ致命的です。

したがってtry-catch、プラグインのエントリ ポイントが必要であり、それらが連携する必要があります (スレッドがクラッシュしないようにするため)。

ただし、一部の計算を中止したい場合は、AppDomains が役立ちます。Thread.Abort直後に AppDomain 全体をアンロードすると、比較的安全に呼び出すことができます。

于 2013-01-19T12:07:10.850 に答える