【问题标题】:NuGet cross-project dependencyNuGet 跨项目依赖
【发布时间】:2017-04-27 17:32:02
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: nuget shared-libraries workflow production-environment


    【解决方案1】:

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

    请参阅this NuGet blog post 了解如何使用 PackageReference,尤其是“其他非 .NET Core 的项目类型怎么办?”部分

    【讨论】:

    • 感谢您的回复,对我来说真的是新功能。那么,你的意思是只有VS2017和NuGet 4才支持这种流?
    • 是的,它是全新的,完全解决了您目前面临的依赖管理的痛苦..
    • 你知道这个功能是否可以通过vs2015和一些插件等使用?
    • 不,这是 VS 2017 和 NuGet 4 的功能。 VS 2015 有 project.json /xproj 预览,现已弃用。
    猜你喜欢
    • 2018-07-14
    • 2019-03-19
    • 2015-12-21
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多