传递依赖导致相同DLL的冲突版本

.NET世界中管理导致版本冲突的传递依赖的最佳实践是什么?

详情:项目A取决于项目B,而项目B又依赖于图书馆C.

项目A还依赖于项目X,它取决于库C的不同和(可能)不兼容的版本。

A-> B-> Cv1.0

A-> X-> Cv2.0
哪里
Cv1.0 Cv2.0

  • 有没有办法让这项工作?

  • 可以在不使用GAC的情况下完成吗?

  • 即使B和X只是二进制格式(来源不可访问),它能否完成?

换句话说,有一种方法可以让Project B和X在项目A中一起使用时使用它们自己的依赖项而不会引起冲突。

注意:我意识到理想情况下我根本不应该有这个问题,但是由于对外部库的依赖扩展,这将是一个不可避免的副作用。 所以我想知道它应该如何最好地处理它。

Stack Overflow上有很多类似的问题。 例如,在同一解决方案中引用2个不同版本的log4net

摘要:

  1. 确保在包含主可执行文件的文件夹中分别在文件夹1.0和2.0中部署程序集C.
  2. 更改app.config文件并包含以下内容:
            

您可以使用sn -T C.dll获取C的公钥标记

如果C的v1.0和v2.0具有不同的公钥(尽管理想情况下它们不应该),那么包括两个dependentAssembly标签。