同一个项目的同一DLL多版本的兼容问题
在做REST接口时,想要引入swagger,引入了最新的Swashbuckle.Net45-5.2.1版本,可是这个版本关联两个DLL(System.Web.Http、System.Net.Http.Formatting)都是5.2.2.0版本,而我使用的是基于framework4.5的5.2.6版本,所以一直报错:
未能加载文件或程序集“xxx, Version=x.x.x.x, Culture=neutral, PublicKeyToken=xxxxxxxxxxxx”或它的某一个依赖项。系统找不到指定的文件
考虑到DLL的版本问题,做了高版本兼容低版本的配置:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.6.0"/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.6.0"/> </dependentAssembly> </assemblyBinding> </runtime>
还有一种情况,确实需要两个DLL并存,此时需要配置如下:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" /> <codeBase version="3.5.0.0" href="Modules\RichTextEditor\v3.5\Newtonsoft.Json.dll" /> <codeBase version="6.0.0.0" href="Modules\RichTextEditor\net\Bin\Newtonsoft.Json.dll" /> </dependentAssembly> </assemblyBinding> </runtime>