Dot-Net

在同一解決方案中引用 2 個不同版本的 log4net

  • July 1, 2010

我正在使用引用 log4net 1.2.10.0 的 NHibernate 2.1.2.400。在同一個項目中,我也使用了簡單的會計 SDK,遺憾的是它仍然使用 log4net 1.2.9.0。

因此,如果我引用 log4net 1.2.10.0 但 simpleSDK 不起作用,我可以讓 NHibernate 工作。反之亦然…

我猜大部分問題都來自 log4net 更改了它的彙編密鑰這一事實。我嘗試使用綁定重定向但沒有成功:這 2 個 DLL 沒有相同的密鑰。

我正在考慮重新編譯 NHibernate 以使用 log4net 1.2.9.0,但這似乎是錯誤的做法,我的感覺是,Simply Accounting 不會很快更新他們的 SDK 以使用 log4net 1.2.10.0。

處理這個問題的最佳方法是什麼?有可能完全解決嗎?

我通過使用this answer to a similar question找到了解決方案

您在項目中為每個版本的 log4net 創建 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] 獲取程序集的公鑰令牌

引用自:https://stackoverflow.com/questions/3158928