2011-05-26 97 views
10

不知怎的,我很幸运,从来没有来处理这个问题,尽管我认为这是一个常见的一种:使用不同版本的参考DLL

我有一个web项目,姑且称之为SomeProjectSomeProject有一个第三方库的参考,我们称它为SomeThirdParty,版本1.0。 SomeProject也有一个本土类图书馆的参考,我们称之为SomeLibrarySomeLibrary也有参考SomeThirdParty,但是不同的版本(比如说2.0)。

版本1.0和2.0的SomeThirdParty共享大部分相同的签名,但是是不同的实现。如果可能的话,我需要SomeProject才能使用1.0实现,而SomeLibrary才能使用2.0实现。

我使用其对log4net的引用编译SomeProject。结束于bin目录的DLL是SomeProject引用的DLL。在运行时,从SomeLibrary运行的代码,它试图从SomeThirdParty 2.0版本执行代码,当然失败时,抛出一个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.

很显然,我可以升级SomeProject到较新的DLL或降级SomeLibrary到旧DLL,但是由于许多原因它不是理想的。

我认为正确的答案涉及在GAC中安装SomeThirdParty,但我不确定如何去做这件事,以及它会如何影响其他开发人员和服务器。

任何建议,你可能有赞赏。

感谢您的帮助。

回答

6

将SomeThirdParty的两个版本放入GAC都应该做你想做的事。使用gacutil实用程序或开始 - >运行 - >程序集,然后拖放。

+2

这就是我的想法。我真的不想走这条路,因为这意味着我们的所有开发人员的机器,所有的服务器和任何新来的开发人员都会在GAC中安装这些程序集。但是如果我们找不到替代品,我会牢记这一点。谢谢。 – 2011-05-26 16:44:12

3

从我的回答早些时候:https://stackoverflow.com/a/19576769/2367343

我使用Oracle.DataAccess.dll就遇到了这个昨天的Visual Studio Web开发人员。

我的解决办法,

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

正下方:

<PropertyGroup> 

广场

<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> 

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

我做

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

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

这样做可以让你的IDE使用的DLL的两个版本。