【问题标题】:Nuget dependencies between prerelease packages预发布包之间的 Nuget 依赖关系
【发布时间】:2016-08-20 06:33:26
【问题描述】:

场景是使用 NuGet 进行包管理。

假设你有一个依赖于 PackageB 的 PackageA,你同时发布了它们,所以每当你发布 PackageA 时,你都要指定你依赖的 Package B 的版本范围。

现在这两个包都使用 Build 自动发布,并且它们使用 SemVer (GitVersion.exe),PackageA 的 6.0.0 版本声明它至少需要 Package B 的 6.0.0 版本。如果包是稳定版。

实际上,这两个包都没有 6.xx 稳定版本,如果我正在安装 PackageA 的预发布版本,它会抱怨,因为它至少需要 packageB 的 6.0.0 版本,但 packageB 只有 6.0.0-prerelease 版本。

这是错误。

Unable to resolve dependencies. 'PackageB 6.0.0-unstable0066' is not compatible with 'PackageA 6.0.0-unstable0015 constraint: PackageB (>= 6.0.0)'.

我的问题是,管理预发布版本包的依赖关系的正确方法是什么?

谢谢。

【问题讨论】:

  • 其实这个问题是因为6.0.0的预发布版本被认为比6.0.0的数量少,这是有道理的,因为它们不稳定。这导致了一个可能的答案,PackageA 的 6.0.0 预发布版本应该声明对比 PackageB 的最新稳定版本更高的版本的依赖关系,但是在构建中自动处理可能会很痛苦。
  • 您是否尝试对您的依赖项定义预发布版本约束? <dependency id="PackageB" version="[6.0.0-unstable00011,)" />
  • 实际上我已经解决了要求版本大于旧版本的最新发布数的问题。所以如果最新的 5.x 版本是 5.4,那么 6.0 包需要的最低版本是 5.5。这自动包括所有 6.0.0-xxxxxxx
  • 我会添加你如何解决它作为答案。
  • 其实不是一个很好的解决方案,所以我认为不值得发布。

标签: c# .net nuget


【解决方案1】:

对我来说,这是 NuGet 的一个明显错误,因为即使您明确添加对 PackageB 6.0.0-unstablewhatever 的引用,NuGet 仍声称这些包不兼容。

或者,更准确地说,如果您使用包引用,它会这样做。如果您使用旧的 package.config 格式,NuGet 很乐意接受预发布包。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    相关资源
    最近更新 更多