NuGet 跨项目依赖

NuGet cross-project dependency

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

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

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

这个工作流程比 SVN 外部形式的共享代码带来更大的痛苦,但我们正在迁移到 Git,共享代码不是它可以有效工作的东西(子树和子模块不是与外部相同!)。

另外,我们的项目解决方案不是只有一个,而是很多,而且依赖链比这个玩具示例要长得多,因此更改版本变得非常痛苦,并且浪费时间。

我建议将您的项目移动到 VS 2017 和 NuGet 4 现在引入的 PackageReference 风格(远离 packages.config)(在最近的 15.2 更新中,经典 .net 项目支持这种风格以及 - 不仅是 .net 核心/.net 标准项目)。最大的区别是依赖关系是传递性的,所以你只需要指定从 Pr1 到 N1 的包引用,并自动获得 N1 引用的 N2 版本。如果您随后将项目 Pr2 的项目引用添加到 Pr1,则该项目将自动获取对 N1 和 N2 的引用。因此,如果您更新 Pr1 使用的 N1 版本,它将获得 N1 所需的对 N2 的更新,并且 Pr2 也将使用新的 N1 和 N2,而不做任何更改。

请参阅 this NuGet blog post 了解如何使用 PackageReference,尤其是 "What about other project types that are not .NET Core?"

部分