尽管我认为这很常见,但我还是很幸运,从来不必处理这个问题:
我有一个网络项目,我们称它为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 '
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,但是我不确定我将如何去做,以及它将如何影响其他开发人员和服务器。
您的任何建议都将不胜感激。
谢谢您的帮助。
最佳答案
将两个版本的SomeThirdParty放入GAC应该可以完成您想要的工作。使用gacutil实用程序或“开始”->“运行”->“程序集”,然后拖放。