NuGet程序包被标记为预发行版

问题描述 投票:0回答:1

我已经建立了一个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

nuget nexus
1个回答
0
投票

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

NuGet.Versioning

我得到输出

版本是预发行版:False

我尝试了static void Main(string[] args) { var version = NuGetVersion.Parse("0.1.1+251019-020007-e3baff"); Console.WriteLine($"Version is prerelease: {version.IsPrerelease}"); } 软件包的许多版本,从最新的5.3.1到4.9.4、4.3.0、3.5.0、3.2.0,甚至是软件包的最旧发行版1.0.1。他们所有人都说您的版本不是预发行版。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.