尽管我认为这很常见,但我还是很幸运,从来不必处理这个问题:

我有一个网络项目,我们称它为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 ' 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实用程序或“开始”->“运行”->“程序集”,然后拖放。

09-07 18:10