我有一个复杂的库A
,它包含几个产生以下程序集的c#项目:
该库是由我编写的,我可以完全访问其源代码。 它取决于几个NuGet包,假设它们是:
这些库(MongoDb驱动程序和EntLib)未安装在GAC中。
我还有一个Web项目B
,我想在其中使用库A
作为DLL的引用(不包括项目到解决方案B
)。
Web项目依赖于几个NuGet包,其中包括:
解决方案A
和B
中这些软件包的版本不匹配,因为它们不是同步开发的。图书馆A
是在一年前开发的,从那时开始按原样使用。
问题:分发库A
的正确方法是什么:
A
依赖项,任何解决方案都可以使用它。A
依赖版本,则它们不会发生冲突。我目前的做法:
A.Core, A.Caching, A.Logging, A.MongoDb
。B
使用mongocsharpdriver 1.5版而lib A
使用版本1.1(版本不兼容)而中断。那么,我该怎么办? 处理冲突引用与引用引用的正确方法是什么?
答案 0 :(得分:7)
管理共享引用的最佳方法是库{A create your own NuGet package,其中包括库A依赖的任何依赖项(包括版本)。如果您不想将库A发布到公共NuGet供稿,则可以host your own feed。
NuGet有一些complex dependency resolution rules将尝试查找与您的项目及其依赖项兼容的依赖项版本。不幸的是,这仍然无法解决您在上面第3点中的问题,其中您的解决方案及其依赖库使用相同外部依赖项的互不兼容的版本。在这种情况下,您只需重新使用解决方案B或库A,以便它们使用相同版本的mongocsharpdriver。