NuGet跨项目依赖关系

NuGet跨项目依赖关系,nuget,shared-libraries,workflow,production-environment,Nuget,Shared Libraries,Workflow,Production Environment,我的问题是关于使用NuGet包共享代码的生产工作流 假设我们有项目Pr1,这取决于NuGet包N1,这取决于包N2。Pr1作为解决方案中其他项目的参考项目添加。 这些项目还依赖于包N1和N2 现在想象一下,我在N2包中做了一些更改。 之后,我需要为N1、Pr1以及同时使用N2和Pr1的每个项目更新N2的包版本,因为如果我不这样做,我可能会得到运行时错误。产生这些问题的原因实际上是程序集被复制到依赖项目的bin目录中,并且该版本与构建时所依据的版本不同 这个工作流给人的痛苦甚至比SVN外部形式的共

我的问题是关于使用NuGet包共享代码的生产工作流

假设我们有项目Pr1,这取决于NuGet包N1,这取决于包N2。Pr1作为解决方案中其他项目的参考项目添加。 这些项目还依赖于包N1和N2

现在想象一下,我在N2包中做了一些更改。 之后,我需要为N1、Pr1以及同时使用N2和Pr1的每个项目更新N2的包版本,因为如果我不这样做,我可能会得到运行时错误。产生这些问题的原因实际上是程序集被复制到依赖项目的bin目录中,并且该版本与构建时所依据的版本不同

这个工作流给人的痛苦甚至比SVN外部形式的共享代码更大,但我们正在迁移到Git,而共享代码不是它能有效工作的东西(子树和子模块与外部不一样!)


此外,我们不仅有一个项目解决方案,还有许多项目,而且依赖关系链比这个玩具示例要长得多,因此更改版本会非常痛苦,而且会浪费时间。

我建议将您的项目移动到
PackageReference
样式(远离
packages.config
)VS 2017和NuGet 4现在已经推出(随着最近的15.2更新,经典的.net项目也支持这一点,而不仅仅是.net core/.net标准项目)。最大的区别在于依赖关系是传递的,因此您只需指定从Pr1到N1的包引用,并自动获取N1引用的N2版本。如果随后将项目引用从项目Pr2添加到Pr1,则此项目将自动获取对N1和N2的引用。因此,如果您更新Pr1使用的N1版本,它将获得N1所需的N2更新,Pr2也将使用新的N1和N2,而不做任何更改


有关如何使用PackageReference的信息,请参阅,特别是“其他非.NET Core的项目类型如何?”

感谢您的回复,这对我来说是一个全新的功能。那么,你的意思是这种流只支持VS2017和NuGet 4吗?是的,它是全新的,正好解决了你目前面临的依赖关系管理的痛苦。你知道吗,这项功能是否可以通过vs2015和一些插件等提供?不,这是VS2017和NuGet 4的功能。VS 2015有
project.json
/xproj预览版,现在已弃用。