1. ホーム
  2. .net

[解決済み] 同じソリューションで2つの異なるバージョンのlog4netを参照しています。

2023-06-26 22:20:31

質問

私は NHibernate 2.1.2.400 を使用しており、log4net 1.2.10.0 を参照しています。 同じプロジェクトで、私は単に会計SDKも使用していますが、悲しいことに、それはまだlog4net 1.2.9.0を使用しています。

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

問題のほとんどは、log4net がアセンブリ キーを変更したことに起因していると推測しています。私は、バインディング リダイレクトを使用してみましたが、成功しませんでした。

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

これを処理する最善の方法は何でしょうか。まったく解決できないのでしょうか。

どのように解決するのですか?

私は、以下の方法で解決しました。 同様の質問に対する回答

あなたのプロジェクトに2つのフォルダを作成し、1つはlog4netの各バージョンに対応します。ソリューションにファイルを追加することによって、対応するフォルダに各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]を使用すると、アセンブリの公開鍵トークンを取得することができます。