NuGet软件包被标记为预发行版

时间:2019-10-29 03:49:12

标签: nuget nexus

我已经构建了一个NuGet软件包,并将其上传到了本地托管的Sonatype Nexus存储库中。

我给了它版本0.1.1+251019-020007-e3baff。我对sem-ver 2.0的理解是,应该将其视为稳定/发布版本(因为+之后的数据应仅被视为元数据),但是nuget似乎很混乱,并且仅当我在搜索中包括预发行版本。

例如在cli中,如果我运行Find-package <my-package-name>,则不会获得任何结果。但是如果我运行Find-Package -prerelease <my-package-name>我会得到

Id                  Versions     Description                                                                                                                                                                                                                                                                          
--                  --------     -----------                                                                                                                                                                                                                                                     
<my-package>        {0.1.1}      <description>

同样,如果我在Visual Studio中使用GUI,则必须检查“ include prerelease”选项,但是可用的版本被标记为“最新稳定版本” ...

在Nexus中,某个标志“ is_prerelease”已被某物设置为true,不确定是什么,该标志设置不正确,然后在搜索中使用了吗?

我在做别的事情吗?我对sem-ver 2.0中的+字符的理解不正确吗?

我正在使用NuGet版本4.9.3,而nexus是版本3.19.0-01

1 个答案:

答案 0 :(得分:2)

NuGet的逻辑可作为软件包使用,NuGet.Versioning package中的版本控制逻辑。使用这个小程序:

static void Main(string[] args)
{
    var version = NuGetVersion.Parse("0.1.1+251019-020007-e3baff");
    Console.WriteLine($"Version is prerelease: {version.IsPrerelease}");
}

我得到了输出

  

版本已发布:False

我尝试了NuGet.Versioning软件包的许多版本,从最新的5.3.1到4.9.4、4.3.0、3.5.0、3.2.0,甚至是软件包的最旧发行版1.0 .1。他们所有人都说您的版本不是预发行版。

因此,不是NuGet认为您的软件包是预发行版。鉴于-是预发行标签的分隔符,我猜测是Nexus错误地做了类似于version.Contains('-')的简单检查来确定它是否是预发行标签。很遗憾,因为semver.org在其网站上有两个不具有此行为的regex表达式(example,我不知道此链接有效的时间)。如果您的Nexus安装未运行最新版本,建议您尝试更新。如果仍然存在问题,则可以尝试与软件供应商联系以报告错误。

作为一种变通方法,只要您继续使用Nexus,就可以尝试避免在构建元数据中使用-字符。 SemVer2允许您使用的字符非常受限制,因此我建议改用.(0.1.1 + 251019.020007.e3baff)。