我已经建立了一个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的逻辑可作为软件包使用,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)。