堅牢である必要があるオートメーション スケジューラ用のプラグイン アーキテクチャを作成しているので、ASP.NET/IIS スタイルの AppDomains を実行しようとしています。彼ら。
ApplicationBase
、ConfigurationFile
、およびを に設定ShadowCopyFiles
していAppDomainSetup
ます。
自動化スケジューラには、プラグインごとにロードする共通のアセンブリが 1 つあります。このアセンブリは、プラグインのメイン アセンブリのロード、キャッチされていない例外のキャッチ、およびログ記録を処理します。私が特定したこのアプローチには、いくつかの弱点があります。
プラグインが保存されている場所に設定
ApplicationBase
すると、共通アセンブリ (別のパスにある) の依存関係は解決されなくなります。イベントをフックすることでこれをハッキングして機能させましたAssemblyResolve
が、それは他の問題につながります。共通アセンブリとプラグインの両方が、同じ名前のアセンブリの独自のコピーを参照している可能性があります (それぞれが異なるバージョンを持つ可能性があります)。または、同じ名前で内容がまったく異なるアセンブリの可能性もあります。をオーバーライド
AssemblyResolve
すると、プラグインのコピーが常に最初にロードされます。これについてはあまり心配していませんが、セキュリティの観点から、プラグインがスケジューラの依存関係をオーバーライドして、悪意のあることを実行したり、共通アセンブリに反映して内部に侵入したりする可能性があることを認識しています。
したがって、おそらくこれを適切に行う唯一の方法は、単にそれを行わないことであると判断しました。強制的に完全に分離し、AppDomain にアセンブリを読み込まないでください。これについての最善の方法が何であるか、またはそれが最善のアプローチであるかどうかさえ、私にはよくわかりません。
どう思いますか?