[.NET]如何讓不同 PublicKeyToken 的 DLL assemblyBinding 到可以用版本?

系統中某個元件使用到 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 的幫忙與測試