解決不一樣版本依賴問題
1. 問題描述
一個項目引用不一樣版本的同一DLL,會引起如下報錯:web
未能加載文件或程序集「xxx, Version=x.x.x.x, Culture=neutral, PublicKeyToken=xxxxxxxxxxxx」或它的某一個依賴項。系統找不到指定的文件app
這裏來解決項目中同一DLL的多版本問題。工具
2. 解決方式
經過配置配置文件(app.config[控制檯或窗體應用等]或web.config[Web項目])增長配置節點dependentAssemblyspa
不一樣場景有不一樣的解決方式,下面說明命令行
場景1、以高版本兼容
例如:新舊項目都引用Newtonsoft.Json,可是不一樣版本。須要以最高版本兼容時:code
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> </appSettings> <system.web> </system.web> <system.webServer> </system.webServer> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
場景2、同一DLL兩種版本共存
例如:項目本身引用log4net.dll 版本1.2.13.0 。添加第三方某個dll,第三方依賴log4net.dll版本1.2.9.0,項目中須要兩種版本共存。 這裏還分兩種狀況,DLL的publicKeyToken相同仍是不一樣 (publicKeyToken查詢見說明)xml
- publicKeyToken相同,配置方法:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" /> <codeBase version="1.2.13.0" href="bin\log4netdll\1_2_13\log4net.dll" /> <codeBase version="1.2.9.0" href="bin\log4netdll\1_2_9\log4net.dll" /> </dependentAssembly> </assemblyBinding> </runtime>
- publicKeyToken不一樣,配置方法:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" /> <codeBase version="1.2.13.0" href="bin\log4netdll\1_2_13\log4net.dll" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="log4net" publicKeyToken="b32731d11ce58905" /> <codeBase version="1.2.9.0" href="bin\log4netdll\1_2_9\log4net.dll" /> </dependentAssembly> </assemblyBinding> </runtime>
說明
- publicKeyToken獲取方式:
使用Visual Studio的Tools Command Prompt命令行工具,輸入:SN -T "path",例如:utf-8
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC>SN -T D:\Newtonsoft.Json.dll Microsoft(R) .NET Framework 強名稱實用工具 版本 4.0.30319.33440 版權全部(C) Microsoft Corporation。保留全部權利。 公鑰標記爲 30ad4fe6b2a6aeed