不知怎的,我很幸运,从来没有来处理这个问题,尽管我认为这是一个常见的一种:使用不同版本的参考DLL
我有一个web项目,姑且称之为SomeProject
。 SomeProject
有一个第三方库的参考,我们称它为SomeThirdParty
,版本1.0。 SomeProject
也有一个本土类图书馆的参考,我们称之为SomeLibrary
。 SomeLibrary
也有参考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,但我不确定如何去做这件事,以及它会如何影响其他开发人员和服务器。
任何建议,你可能有赞赏。
感谢您的帮助。
这就是我的想法。我真的不想走这条路,因为这意味着我们的所有开发人员的机器,所有的服务器和任何新来的开发人员都会在GAC中安装这些程序集。但是如果我们找不到替代品,我会牢记这一点。谢谢。 – 2011-05-26 16:44:12