NuGet 包被标记为预发布
NuGet Package being marked as prerelease
我构建了一个 NuGet 包并将其上传到本地托管的 Sonatype Nexus 存储库。
我给它的版本是0.1.1+251019-020007-e3baff
。我对 sem-ver 2.0 的理解是这应该被视为一个 stable/release 版本(因为 +
之后的数据应该只被视为元数据),但是 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" 选项,但是可用的版本标记为 "latest stable"...
在 Nexus 中有一个标记 "is_prerelease" 被某些东西设置为 true,不确定是什么,该标记是否被错误设置然后被用于搜索?
我还有什么地方做错了吗?我对 sem-ver 2.0 中的 +
字符的理解不正确吗?
我使用的是 NuGet 4.9.3 版本,nexus 是 3.19.0-01 版本
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}");
}
我得到输出
Version is prerelease: False
我尝试了很多版本的 NuGet.Versioning
包,从最新的 5.3.1 到 4.9.4、4.3.0、3.5.0、3.2.0,甚至是包的最旧版本, 1.0.1.都说你的版本不是prerelease
因此,并不是 NuGet 认为您的包是预发布的。鉴于 -
是预发布标签的分隔符,我的猜测是 Nexus 错误地进行了类似于 version.Contains('-')
的简单检查以确定它是否是预发布。这是一种耻辱,因为 semver.org 在他们的网站上有两个没有这种行为的正则表达式(example,我不知道这个 link 将有效多久)。如果您的 Nexus 安装不是 运行 最新版本,我建议您尽可能尝试更新。如果仍然存在问题,您可以尝试联系软件供应商报告错误。
作为变通方法,您可以尝试避免在构建元数据中使用 -
字符,只要您继续使用 Nexus。 SemVer2 在允许您使用的字符方面受到很大限制,因此我建议改用 .
(0.1.1+251019.020007.e3baff).
我构建了一个 NuGet 包并将其上传到本地托管的 Sonatype Nexus 存储库。
我给它的版本是0.1.1+251019-020007-e3baff
。我对 sem-ver 2.0 的理解是这应该被视为一个 stable/release 版本(因为 +
之后的数据应该只被视为元数据),但是 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" 选项,但是可用的版本标记为 "latest stable"...
在 Nexus 中有一个标记 "is_prerelease" 被某些东西设置为 true,不确定是什么,该标记是否被错误设置然后被用于搜索?
我还有什么地方做错了吗?我对 sem-ver 2.0 中的 +
字符的理解不正确吗?
我使用的是 NuGet 4.9.3 版本,nexus 是 3.19.0-01 版本
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}");
}
我得到输出
Version is prerelease: False
我尝试了很多版本的 NuGet.Versioning
包,从最新的 5.3.1 到 4.9.4、4.3.0、3.5.0、3.2.0,甚至是包的最旧版本, 1.0.1.都说你的版本不是prerelease
因此,并不是 NuGet 认为您的包是预发布的。鉴于 -
是预发布标签的分隔符,我的猜测是 Nexus 错误地进行了类似于 version.Contains('-')
的简单检查以确定它是否是预发布。这是一种耻辱,因为 semver.org 在他们的网站上有两个没有这种行为的正则表达式(example,我不知道这个 link 将有效多久)。如果您的 Nexus 安装不是 运行 最新版本,我建议您尽可能尝试更新。如果仍然存在问题,您可以尝试联系软件供应商报告错误。
作为变通方法,您可以尝试避免在构建元数据中使用 -
字符,只要您继续使用 Nexus。 SemVer2 在允许您使用的字符方面受到很大限制,因此我建议改用 .
(0.1.1+251019.020007.e3baff).