使用不同版本的引用DLL
本文关键字:引用 DLL 版本 | 更新日期: 2023-09-27 17:57:37
不知怎么的,我很幸运,从来没有处理过这个问题,尽管我认为这是一个常见的问题:
我有一个网络项目,我们称之为SomeProject
。SomeProject
引用了第三方库,我们称之为SomeThirdParty
,版本1.0。SomeProject
还引用了一个自制的类库,我们称之为SomeLibrary
。SomeLibrary
也引用了SomeThirdParty
,但有一个不同的版本(比如说2.0)
SomeThirdParty
的1.0版和2.0版共享大部分相同的签名,但实现方式不同。如果可能的话,我需要SomeProject
使用1.0实现,SomeLibrary
使用2.0实现。
我使用它对log4net的引用来编译SomeProject
。最终在bin目录中的DLL是SomeProject
引用的DLL。在运行时,当SomeLibrary
中的代码运行时,它会尝试执行SomeThirdParty
2.0版本中的代码,当然会失败,抛出FileLoadException: Could not load file or assembly '
SometerParty , Version=2.0.0.0, Culture=[etc.]' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.
显然,我可以将SomeProject
升级到较新的DLL或将SomeLibrary
降级到较旧的DLL,但由于多种原因,这并不理想。
我认为正确的答案是在GAC中安装SomeThirdParty,但我不确定我会怎么做,也不确定它会对其他开发人员和服务器产生什么影响。
如有任何建议,我们将不胜感激。
谢谢你的帮助。
将SomeThirdParty的两个版本都放入GAC应该可以随心所欲。使用gautil实用程序或启动->运行->程序集,然后拖动。
根据我之前的回答:https://stackoverflow.com/a/19576769/2367343
我昨天为visual studio web开发人员使用Oracle.DataAccess.dll遇到了这个问题。
我的解决方案,
右键单击您的项目(*.csproj)并对其进行编辑。
右下方:
<PropertyGroup>
放置
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
然后重新构建解决方案。在项目中包含这两个版本dll时,必须将它们分离到两个不同的目录中(必需)。
我做了
ora11 >> Oracle.DataAccess.dll (Version 11)
ora9 >> Oracle.DataAccess.dll (Version 9)
这样做可以让IDE同时使用两个版本的DLL。