传递依赖造成同一个DLL的版本冲突(Transitive Dependency causing Co

2019-07-30 06:02发布

什么是.NET世界上最好的做法来管理传递依赖造成版本冲突?

在详细信息:项目A依赖于项目B而这又取决于库C

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

A-> B-> Cv1.0

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

  • 有没有一种方法,使这项工作?

  • 可以在不使用GAC做些什么呢?

  • 可以的,如果B和X是二进制格式只(来源无法访问),它甚至可以做?

换句话说,有没有办法在那里,而不会造成冲突,项目A一起使用时,我可以有项目B和X各自使用自己的依赖。

注:我知道,我的理想不应该有这个问题在所有但作为外部库的依赖扩大,这将是一个不可避免的副作用。 所以我想知道它应该会出现如何最好地处理它。

Answer 1:

还有很多类似的问题,堆栈溢出。 对于例如引用2个不同版本的log4net的在相同溶液中

摘要:

  1. 确保您包含主可执行文件夹内分别部署在文件夹中1.0和2.0的组件℃。
  2. 更改app.config文件,其中包括类似以下内容:
  <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="C" publicKeyToken="C's public key token" /> <codeBase version="version string for C1.0 eg 1.0.0.0" href="1.0\C.dll" /> <codeBase version="version string for C2.0 eg 2.0.0.0" href="2.0\C.dll" /> </assemblyIdentity> </dependentAssembly> </assemblyBinding> </runtime> </configuration> 

您可以使用SN-T C.dll得到C的公钥标记

若C的V1.0和V2.0有不同的公共密钥(尽管理想的他们不应该),那么包括两个dependentAssembly标签。



文章来源: Transitive Dependency causing Conflicting version of same DLL