使用不同版本的引用DLL

本文关键字:引用 DLL 版本 | 更新日期: 2023-09-27 17:57:37

不知怎么的,我很幸运,从来没有处理过这个问题,尽管我认为这是一个常见的问题:

我有一个网络项目,我们称之为SomeProjectSomeProject引用了第三方库,我们称之为SomeThirdParty,版本1.0。SomeProject还引用了一个自制的类库,我们称之为SomeLibrarySomeLibrary也引用了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,但我不确定我会怎么做,也不确定它会对其他开发人员和服务器产生什么影响。

如有任何建议,我们将不胜感激。

谢谢你的帮助。

使用不同版本的引用DLL

将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。