私は、メイン アプリが新しい AppDomain の実行時にアセンブリ Addin1.dll と Addin2.dll をロードするアドイン システムを実行しています。
ただし、Addin1.dll が私のキーで署名され (厳密な名前)、Addin2.dll が署名されていない場合、Addin1.dll のみをロードして Addin2.dll を拒否できるようにしたいと考えています。
AppDomainSetup でいくつかのパラメーターを設定して行う必要があると思われますか?
私は、メイン アプリが新しい AppDomain の実行時にアセンブリ Addin1.dll と Addin2.dll をロードするアドイン システムを実行しています。
ただし、Addin1.dll が私のキーで署名され (厳密な名前)、Addin2.dll が署名されていない場合、Addin1.dll のみをロードして Addin2.dll を拒否できるようにしたいと考えています。
AppDomainSetup でいくつかのパラメーターを設定して行う必要があると思われますか?
Evidenceパラメーターを受け取るAssembly.Loadメソッドを調べます。公開鍵から証拠を作成する方法の例については、こちらを参照してください。
DomainManager を実装して、ロード/ブロックの決定を好きなものに基づいて行うことができます。ここでやや関連する質問に答えました。
アセンブリのパブリッシャー ポリシーがクライアントまたはエンド ユーザー環境によって満たされている場合は、AppDomain クラスの Load メソッドを使用して、新しいアセンブリを Appdomain に読み込むことができます。
また、厳密な名前付きアセンブリは、アセンブリの発行者と CLR によって定められたすべての規則に従います。したがって、アセンブリのユーザーは、appdomain に読み込まれるアセンブリのセキュリティ面を満たす必要があります。
CLR は、厳密な名前のプロパティを使用して、参照先のグローバル アセンブリを GAC から読み込みます。参照されたアセンブリが GAC で使用可能な場合、CLR はそれを含むサブディレクトリを返し、マニフェストを保持するファイルが読み込まれます。この方法でアセンブリを見つけることで、呼び出し元は、実行時に読み込まれたアセンブリが、コードがコンパイルされたアセンブリをビルドしたのと同じ発行元からのものであることが保証されます。次に、参照アセンブリの assemblyRef テーブルの公開キー トークンと、参照アセンブリの AssemblyDef テーブルの公開キー トークンを比較します。参照されているアセンブリが GAC にない場合、CLR はアプリケーションのベース ディレクトリを調べてから、アプリケーションの構成ファイルで識別されるプライベート パスを調べます。アセンブリを含むアプリケーションが MSI を使用してインストールされている場合、CLR は MSI を呼び出して必要なアセンブリを読み込みます。