解决同时引用一个dll的多个版本的冲突问题(HslCommunication为例)
Demo地址
代码地址:https://gitee.com/chenheze90/L22_DifferentDLLVersionCompatible
代码zip下载:https://gitee.com/chenheze90/L22_DifferentDLLVersionCompatible/repository/archive/master.zip
背景
最近碰上一个问题,一个项目同时引用的好几个不同版本的dll——HslCommunication.dll。而且这几个dll是互相不兼容的。这就导致了项目无法正常与运行下去。两个版本如下
1.dll合并法
首先要先去nuget上下载ILMerge,这个是一个第三方的dll合并组件,详细的教程查看博客:https://blog.youkuaiyun.com/magicchz/article/details/130314669有完整的教学还有demo
将这个文件的目录记一下,后面会用到
然后就是修改项目文件,增加以下两行
<Target Name="ILMerge">
<Exec Command="D:\users\chenhz2\WorkSpace\L22_DifferentDLLVersionCompatible\packages\ILMerge.3.0.41\tools\net452\ILMerge.exe bin\Release\DifferentDLLVersionCompatible.exe /out:bin\Release\DifferentDLLVersionCompatible.exe bin\Release\oldHls\HslCommunication.dll" />
</Target>
<Target Name="_ProjectRemoveDependencyFiles" AfterTargets="AfterBuild" DependsOnTargets="ILMerge">
<ItemGroup>
<_ProjectDependencyFile Include="bin\Release\HslCommunication.dll" />
<_ProjectDependencyFile Include="bin\Release\DifferentDLLVersionCompatible.pdb" />
</ItemGroup>
<Delete Files="@(_ProjectDependencyFile)" />
</Target>
如图所示
右键点击生成即可。我们可以看到生成的exe非常大,2M,这个是合并后的结果
2.probing方法
新建项目,复制上个例子的代码
复制新旧两个dll的文件夹过去
添加引用,然后将HslCommunication引用的复制本地属性改成false。
然后打开config文件,加上以下代码
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="oldHls"/>
</assemblyBinding>
</runtime>
生成项目,可以看到debug下没有HslCommunication.dll
直接运行exe也可以正常运作