.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在Project A中一起使用时各自使用自己的依赖项而不会引起冲突。
注意:我意识到理想情况下我根本不应该有这个问题,但是由于对外部库的依赖扩展,这将是一个不可避免的副作用。所以我想知道它应该如何最好地处理它。
答案 0 :(得分:4)
Stack Overflow上有很多类似的问题。 对于例如Referencing 2 different versions of log4net in the same solution
要点:
<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 e.g. 1.0.0.0" href="1.0\C.dll" /> <codeBase version="version string for C2.0 e.g. 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标签。