系統中某個元件使用到 log4net v.1.2.10.0 ,而另一個元件則使用到了 v1.2.13.0 的版本。
2個版本的 PublicKeyToken 還不同。而我的 bin 目錄,只有 v1.2.14.0 的版本。
要如何設定 assemblyBinding 呢?
在「何讓相同的DLL使用bin目錄的,而不要使用到GAC的呢?」一文中,
可以透過在 config 檔中設定 assemblyBinding 使用到專案想要使用到某個版本的 DLL 檔。
例如log4net 舊的版本是 1.2.10.0 , publicKeyToken 是 1b44e1d426115821,
而另一元件則是使用 1.2.14.0, publicKeyToken 是 669e0ddf0bb1aa2a。
因為 publicKeyToken 不同,所以就再使用 codeBase 來指定, Load 入不同的 DLL,
可以參考「Referencing 2 differents versions of log4net in the same solution」,
依不同的版本,寫不同的 dependentAssembly (1.2.10.0 版的 log4net.dll 我是放在程式執行目錄下的 log4net1210 目錄之中) , 如下,
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" />
<codeBase version="1.2.10.0" href="log4net1210\log4net.dll" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" />
<bindingRedirect oldVersion="1.2.13.0-1.2.14.0" newVersion="1.2.14.0" />
<codeBase version="1.2.14.0" href="log4net.dll" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
感謝同事 jenny 的幫忙與測試
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^