我已经构建了一个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
答案 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)。