【问题标题】:How does nuget handle project references when publishing packages?发布包时,nuget如何处理项目引用?
【发布时间】:2021-07-22 07:50:34
【问题描述】:

例如,假设我有 2x csproj 称为 AB

我们在BA 中有一个项目参考,所以这里有一些场景,我找不到有关如何处理的信息:

场景 1 - 当 A 不是已发布的包时发布 B

我假设在这种情况下它会在尝试发布 B 时失败,因为它无法为 A 找到对 nuget 的合适依赖项,尽管我在这里猜测所以澄清会很好。

方案 2 - 独立发布两个包

这是更有趣的场景之一,所以可以说A 没有任何变化,但我们想发布B,它如何将项目引用从A 转换为对A 的nuget 依赖?它是否只是在 nuget 中查找 A 的最新版本并为其添加依赖项?

场景 3 - 两个包一起发布

这是更常见的场景之一,在这种情况下,我可以看到,每当您在解决方案中发布一个包时,您也会为其他所有内容打包新版本,因此它们的版本号保持一致,这似乎会创建对所有包的依赖项与此处预期的版本相同。


所以场景 1 和 2 是我感兴趣的主要部分,因为我们开始讨论是否应该在同一解决方案中的项目之间有项目引用与包引用,以及是否要对本地项目进行包引用这似乎毫无意义,他们还不如在自己的回购中。所以我只是想知道 nuget 如何处理实际的发布,这样我们就可以继续讨论有关版本控制等的一些事实。

【问题讨论】:

    标签: c# .net nuget nuget-package


    【解决方案1】:

    这取决于您为创建 nuget 包的命令提供的选项。 您可以独立创建它,也可以创建包含引用的项目。

    要包含项目中引用的内容,例如 B 以包含 A,您可以使用以下选项运行 pack 命令:

    nuget pack -Prop Configuration=Release -IncludeReferencedProjects

    选项 -Prop 使您能够设置构建 .nupkg 时要应用的配置。 -IncludeReferencedProjects 选项确实将所有引用的项目依赖项包含到 .nupkg 文件中。

    如果您的项目依赖于另一个项目/类库,我会将其包含在创建的 nuget 包中。否则你为什么要发布一个损坏的包。如果您分别发布它们,那么 nuget 应该能够通过使用您在 B 包中指定的版本从 nuget 源安装它来解决依赖关系。如果它找不到特定的参考版本,那么它就是一个损坏的包,正如 Jon 所说,你必须小心以正确的顺序或一起发布你的包。如果您的 nuget 无法从 nuget 依赖项中解析它,它将自动包含 dll(如果它们存在于您的解决方案中)。

    【讨论】:

    • 如果我们不包含引用项目 (A),但它如何解决版本(假设 nuget 上已经有版本)?它只是选择最新的专业还是只选择真正的最新版本等?我找不到任何与此相关的文档,这是我试图找出的关键问题之一。
    • @Grofit:我相信它发布它时依赖于引用项目声明的版本。是的,如果您在代码中添加了一些内容但没有修改版本号,或者修改了版本号但没有发布该版本,这很危险。我通常会注意一次发布整组包。
    猜你喜欢
    • 2021-04-24
    • 1970-01-01
    • 2015-03-31
    • 2023-03-07
    • 2020-03-04
    • 2020-12-26
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多