10

バージョンの競合を引き起こす推移的な依存関係を管理するための .NET の世界でのベスト プラクティスは何ですか?

詳細:プロジェクトAはプロジェクトBに依存し、プロジェクトBはライブラリCに依存します

また

プロジェクト A は、異なる (潜在的に) ライブラリ C の互換性のないバージョンに依存するプロジェクト X にも依存しています。

A->B->Cv1.0
&
A->X->Cv2.0
ここで
Cv1.0 <> Cv2.0

  • これを機能させる方法はありますか?

  • GACを使用せずに実行できますか?

  • B と X がバイナリ形式のみ (ソースにアクセスできない) でも実行できますか?

言い換えれば、プロジェクト A で一緒に使用するときに、プロジェクト B と X をそれぞれ独自の依存関係を使用して、競合を引き起こすことなく使用できる方法があります。

注: 理想的には、この問題はまったく発生しないはずですが、外部ライブラリへの依存が拡大するにつれて、これは避けられない副作用になります。そのため、どのように対処するのが最善なのか疑問に思っています。

4

1 に答える 1

5

スタック オーバーフローに関する同様の質問がたくさんあります。たとえば、同じソリューションで 2 つの異なるバージョンの log4net を参照する場合

概要:

  1. アセンブリ C を、メインの実行可能ファイルを含むフォルダー内のフォルダー 1.0 と 2.0 にそれぞれ配置してください。
  2. app.config ファイルを変更し、次のようなものを含めます。
 <configuration>
   <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
       <assemblyIdentity name="C" publicKeyToken="C's public key token" />
        <codeBase version="version string for C1.0 e.g. 1.0.0.0" href="1.0\C.dll" />
        <codeBase version="version string for C2.0 e.g. 2.0.0.0" href="2.0\C.dll" />
       </assemblyIdentity>
      </dependentAssembly>
    </assemblyBinding>
   </runtime>
 </configuration>

sn -T C.dll を使用して、C の公開鍵トークンを取得できます。

C の v1.0 と v2.0 の公開鍵が異なる場合 (理想的にはそうすべきではありません)、2 つのdependentAssembly タグを含めます。

于 2012-07-05T08:17:48.607 に答える