3

私はplugin Pと私がコントロールできないapplication A(.NET40)を持っています。
Pアセンブリ(.NET40)にはshared dependency D(.NET35)があります。プラグインのシナリオでアセンブリバインディングのリダイレクトを達成するにはどうすればいいですか?

PおよびDの両方はFSharp.Coreに依存して、異なるバージョン:

PFSharp.Core, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
Dに対してコンパイルされているがのみFSharp.Core、バージョン= 4.4.0.0が配備さFSharp.Core, Version=2.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

に対してコンパイルされていますAppDomain.AssemblyResolveを購読して、デプロイされたアセンブリを読み込みます。

両方のFSharp.CoreバージョンがGACにインストールされている私のマシンでテストしていますが、両方ともプラグインがロードされてしまいます。

バインドリダイレクトはここでの解決方法ですが、app.configにアクセスすることなくどのように行うことができますか?

+0

「共有依存関係」とは何ですか?どこにDが見つかりますか? – Funk

+0

私はDが私の他のプロジェクトによって参照される別のプロジェクト(コードベースの一部)であることを意味しました。 Dターゲット.NET40を使用し、同じFSharp.Coreバージョンを参照すると、バージョンの競合が防止されます。しかし、少なくとも別のプロジェクトでは、.NET35を対象とするDが必要です。 – 0li

答えて

2

Dをpublisher policyアセンブリとして展開できます。

このアプローチの利点は、クライアントディレクトリが新しいバージョンにリダイレクトするために* .configファイルを含む必要がないことです。パブリッシャポリシーを使用すると、アセンブリのパブリッシャは、*。configファイルのバイナリバージョンを(アセンブリと共に)GACにインストールできます。このようにして、CLRはGACのレベルで要求されたリダイレクトを実行できます。

特定のアプリのパブリッシャーポリシーをバイパスしたい場合は、<publisherPolicy>要素を使用してアプリの* .configファイルに指定することができます。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <runtime> 
     <assemblyBinding xmlns=“urn:schemas-microsoft-com:asm.v1”> 
      <publisherPolicy apply="no" /> 
     </assemblyBinding> 
    </runtime> 
</configuration> 
関連する問題