为什么NuGET认为1.2.3.4是一个稳定的(发布)版本?

为什么NuGET认为1.2.3.4是一个稳定的(发布)版本?,nuget,nuget-package,semantic-versioning,Nuget,Nuget Package,Semantic Versioning,我在下面看到: 1.2.3 // release 1.2.3+hash // release 1.2.3-alpha // pre-release 1.2.3-alpha.12 // pre-release 1.2.3.4 // why is this release version and not pre-release version or invalid? 1.2.3.4.5 // invalid nuget version 我不

我在下面看到:

1.2.3          // release
1.2.3+hash     // release
1.2.3-alpha    // pre-release
1.2.3-alpha.12 // pre-release

1.2.3.4        // why is this release version and not pre-release version or invalid?
1.2.3.4.5      // invalid nuget version
我不明白为什么
1.2.3.4
被认为是下面提到的发行版本:

预发布版本的定义是什么? NuGet(大部分)符合SemVer2,如其网站上所定义:

第9节开始:

预发布版本可以通过在补丁版本之后立即添加连字符和一系列点分隔标识符来表示

但是SemVer2不允许4段版本 正确,但正如问题的评论中所提到的,NuGet正在为以前支持的内容添加向后兼容性支持。事实上,这是在2011年向NuGet添加SemVer支持的承诺:

我们可以从大量文件中看到,NuGet以前使用
System.Version
作为之前的软件包版本,您可以从中看到它包含这个4段版本。
SemVer.cs
的第一个版本包含:

SemVer的一种混合实现,支持如中所述的语义版本控制,但不严格强制执行 允许旧的4位版本控制方案继续工作

该文件后来被重命名为
SemanticVersion
,后来被拆分为
numetversion
,扩展了严格意义上的semver2
SemanticVersion
,但是

结论 因此,尽管SemVer2对预发布的定义明确要求连字符立即跟随修补程序版本,但向后兼容性阻止NuGet(即使在初次发布1年后)完全转向严格遵守SemVer2


因此,需要对SemVer2进行一些重新解释,选择是使连字符成为预释放信号,不超过3段。9年后,这就是我们所拥有的,nuget.org上有数千个软件包使用了4个段版本,其中一些带有额外的预发布标签。

简单的回答是,Microsoft希望采用SemVer,同时保持其4部分版本控制方案的向后兼容性,即使是发布版本也可以有4个部分。