同じソリューションで2つの異なるバージョンのlog4netを参照する 質問する

同じソリューションで2つの異なるバージョンのlog4netを参照する 質問する

私は log4net 1.2.10.0 を参照している NHibernate 2.1.2.400 を使用しています。同じプロジェクトで、simply accounting SDK も使用していますが、残念ながらまだ log4net 1.2.9.0 を使用しています。

したがって、log4net 1.2.10.0 を参照すると NHibernate は動作しますが、simplySDK は動作しません。その逆も同様です...

問題のほとんどは、log4net がアセンブリ キーを変更したことから生じていると思います。バインディング リダイレクトを使用してみましたが、成功しませんでした。2 つの DLL のキーが同じではありません。

私は NHibernate を再コンパイルして log4net 1.2.9.0 を使用することを検討していますが、それは間違ったやり方のように思えます。また、Simply Accounting が log4net 1.2.10.0 を使用するように SDK をすぐに更新することはないだろうと私は感じています。

これに対処する最善の方法は何でしょうか? 解決することは可能でしょうか?

ベストアンサー1

私はこれを使って解決策を見つけました同様の質問への回答

プロジェクトに、log4net のバージョンごとに 1 つずつ、2 つのフォルダーを作成します。各 log4net.dll を、ソリューションにファイルを追加して (参照の追加ではなく)、対応するフォルダーに配置します。ビルド時に出力フォルダーに自動的にコピーされるように、出力ディレクトリへのコピー プロパティを常にコピーするように設定できます。

次に、次のような内容を追加して app.config ファイルを変更します。

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="log4net" publicKeyToken="681549d62126b7b8" />
        <codeBase version="1.2.9.0" href="log4netv1.2.9.0\log4net.dll" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" />
        <codeBase version="1.2.10.0" href="log4netv1.2.10.0\log4net.dll" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" />
        <codeBase version="1.2.11.0" href="log4net.dll" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

sn -T [assemblyName] を使用すると、アセンブリの公開キー トークンを取得できます。

おすすめ記事