【发布时间】: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
-
我会添加你如何解决它作为答案。
-
其实不是一个很好的解决方案,所以我认为不值得发布。