引用从也使用其中一些包的项目中使用NuGet包的程序集

时间:2012-09-18 10:30:54

标签: c# .net assemblies nuget .net-assembly

我有一个复杂的库A,它包含几个产生以下程序集的c#项目:

  • A.Core
  • A.Caching
  • A.Logging
  • A.MongoDb

该库是由我编写的,我可以完全访问其源代码。 它取决于几个NuGet包,假设它们是:

  • mongocsharpdriver
  • EnterpriseLibrary.Caching
  • EnterpriseLibrary.Logging

这些库(MongoDb驱动程序和EntLib)未安装在GAC中。

我还有一个Web项目B,我想在其中使用库A作为DLL的引用(不包括项目到解决方案B)。 Web项目依赖于几个NuGet包,其中包括:

  • mongocsharpdriver
  • EnterpriseLibrary.Logging

解决方案AB中这些软件包的版本不匹配,因为它们不是同步开发的。图书馆A是在一年前开发的,从那时开始按原样使用。

问题:分发库A的正确方法是什么:

  1. 即使没有引用lib A依赖项,任何解决方案都可以使用它。
  2. 如果解决方案有自己的lib A依赖版本,则它们不会发生冲突。
  3. 我目前的做法:

    1. 从我的解决方案中,我引用了四个dll:A.Core, A.Caching, A.Logging, A.MongoDb
    2. 然后,如果它们不存在,我将其所有NuGet依赖项添加到解决方案中。
    3. 有时会因解决方案B使用mongocsharpdriver 1.5版而lib A使用版本1.1(版本不兼容)而中断。
    4. 那么,我该怎么办? 处理冲突引用与引用引用的正确方法是什么?

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。