Dependencies 我应该如何管理作为单独的NuGet包部署的项目之间的依赖关系?

Dependencies 我应该如何管理作为单独的NuGet包部署的项目之间的依赖关系?,dependencies,nuget,Dependencies,Nuget,我正在使用NuGet管理我在几个WebAPI项目中使用的共享库,我不知道如何管理共享项目中各个部分之间的依赖关系 我的共享库配置为包含三个项目的解决方案: +------MyUtils.Core------+ | | MyUtils.WebApi.Windsor MyUtils.WebApi.Security Windsor和安全模块都依赖于Core,但应保持可作为单独的NuGet软件包部署 我的

我正在使用NuGet管理我在几个WebAPI项目中使用的共享库,我不知道如何管理共享项目中各个部分之间的依赖关系

我的共享库配置为包含三个项目的解决方案:

           +------MyUtils.Core------+
           |                        |
MyUtils.WebApi.Windsor    MyUtils.WebApi.Security 
Windsor和安全模块都依赖于Core,但应保持可作为单独的NuGet软件包部署

我的问题是-我应该以NuGet包的形式发布Core,然后将该包添加到Windsor和Security,还是应该在Windsor和Security项目中向Core添加项目引用,然后将它们作为单独的项目发布


如果是后者,如果我正在构建一个同时具有Windsor和Security的项目,并且我将其中一个升级到包含不同版本MyUtils.Core的版本,我是否会冒潜在冲突的风险?

假设我理解这个问题,我会这样做

做3个包裹。Core是最简单的,因为它没有依赖项。创建Core时,它将以某种方式获得版本号(您可以使用程序集版本号,也可以手动指定)

创建其他两个包时,请指定Core()的确切版本号

示例MyUtils.WebApi.Windsor.nuspec:

<dependency id="MyUtils.Core" version="[1.0.1.1]" />

完成此操作后,您可以更新安全性以使用下一个版本,例如1.0.1.2。但是,您将避免在同时使用两者的项目中发生冲突。当版本号被精确指定时,NuGet将拒绝更新安全性,除非它能找到同样依赖于1.0.1.2的Windsor版本。如果找不到兼容的软件包,则不进行更新。如果可以,那么在更新安全性时,它将同时更新这两者

默认情况下,版本号是这样指定的

<dependency id="MyUtils.Core" version="1.0.1.1" />

在本例中,它表示MyUtils.Core>=1.0.1.1的任何版本。因此,如果使用默认语法,则在同时使用Windsor和Security的项目中可能会发生冲突,但使用确切的版本语法应该能够避免冲突

假设您走了另一条路线,没有为核心创建包,并且使用了项目引用。然后,您可能会将Core.dll的副本放在每个需要它的包中。嗯,消费项目一次只能引用Core.dll的一个副本。我必须使用NuGet来查看它将添加哪个引用(最高版本与最近安装的版本相比),但底线是,如果您有突破性的更改,那么您的一个依赖库将突破。因此,似乎采取项目参考可能不是最好的解决方案

当然,只有在实际需要避免冲突时才需要这样做。如果您的1.0.1.2是向后兼容的,那么没有理由不允许NuGet中的默认行为