0

Mef 経由で特定の (拡張可能な) 機能をロードするアプリケーションがあります。これらのモジュールはサード パーティのコントロール (Telerik) を使用する可能性があるため、(前述のコントロールを使用してフォームを開いたときに) ユーザーが認識する読み込み時間を最小限に抑えたいので、これらの Mef モジュールが参照するアセンブリをプリロードしたいと考えています。

私がやっていることは、Assembly.GetReferencedAssemblies(..) メソッドを使用して、Mef モジュールごとに参照アセンブリの名前を取得し、それらを Assembly.Load(..) しようとすることです。

モジュールはファイルシステムの「どこかに」配置されているため (通常、ExecutingAssembly のパスとは異なります)、Gac にないこれらの Mef モジュールの参照のロードは失敗します。

AppDomain.CurrentDomain のアセンブリ ロード パスを変更する方法はありますか? AppDomain.AssemblyLoad イベントについては知っていますが、各モジュールが異なるディレクトリに存在する可能性があるため、これを利用するのはやや面倒です。

4

1 に答える 1

0

以前は単純に を呼び出すことができましたAppDomain.AppendPrivatePathが、このメソッドは、ロード順序の問題を引き起こす可能性があるため、廃止されたとマークされています (こちらを参照)。推奨されるアプローチは、構成を更新して追加のパスを含めるか、使用することAppDomainSetup.PrivateBinPathです (ただし、後者は、新しいアプリケーション ドメインを作成する場合に使用します)。

構成の変更を適用するには:

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin2\subbin;bin3"/>
      </assemblyBinding>
   </runtime>
</configuration>

(関連する MSDN ページから直接持ち上げた)。セミコロンで区切って複数のプローブ パスを指定できることに注意してください。を使用するリスクがAppDomain.AppendPrivatePath(...)あります。.NET BCL v4.0 の時点ではまだ存在しますが、理由により廃止されているとマークされています。

于 2012-06-25T07:33:59.587 に答える