使用不同版本的引用DLL

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

我有一个网络项目,我们称之为SomeProjectSomeProject引用了第三方库,我们称之为SomeThirdParty ,版本1.0。 SomeProject还引用了一个本土类库,我们称之为SomeLibrarySomeLibrary也有SomeLibrary的引用,但是有一个不同的版本(比方说2.0)。

SomeThirdParty 1.0和2.0 SomeThirdParty共享大多数相同的签名,但它们是不同的实现。 我需要SomeProject使用1.0实现, SomeLibrary使用2.0实现,如果可能的话。

我使用它对log4net的引用编译SomeProject 。 最终在bin目录中的DLL是SomeProject引用的DLL。 在运行时,当SomeLibrary代码运行时,它会尝试从SomeLibrary 2.0版本执行代码,当然SomeThirdParty失败,抛出FileLoadException: Could not load file or assembly ' SomeThirdParty , Version=2.0.0.0, Culture=[etc.]' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. etc。 , Version=2.0.0.0, Culture=[etc.]' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. , 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应该可以做你想要的。 使用gacutil实用程序或开始 – >运行 – >程序集然后拖放。

从我之前的回答: https : //stackoverflow.com/a/19576769/2367343

我昨天遇到了使用Oracle.DataAccess.dll的visual studio web开发人员。

我的解决方案

右键单击您的项目(* .csproj)并进行编辑。

正下方:

  

地点

 true 

然后重建您的解决方案。 在包含它们时(必需),必须将两个版本dll分离到项目中的两个不同目录中。

我做到了

 ora11 >> Oracle.DataAccess.dll (Version 11) ora9 >> Oracle.DataAccess.dll (Version 9) 

这样做允许您的IDE使用两个版本的DLL。