Dot-Net
在同一解決方案中引用 2 個不同版本的 log4net
我正在使用引用 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] 獲取程序集的公鑰令牌