Nuget 版本控制:通配符与未指定的组件

voi*_*ter 2 c# nuget

阅读Nuget 版本文档,我不明白两者之间的区别:

<PackageReference Include="ExamplePackage" Version="6.1" />
Run Code Online (Sandbox Code Playgroud)

和:

<PackageReference Include="ExamplePackage" Version="6.1.*" />
Run Code Online (Sandbox Code Playgroud)

如果实际的软件包版本是6.1.5. 似乎两者都满足要求(6.1.5大于6.16.1.0)。为此,我假设缺少组件(例如上面第一个示例中的第三个组件)是0为了进行版本比较。

如果有的话,有人可以解释语义差异吗?

tha*_*guy 5

如果实际的包版本是 6.1.5。似乎两者都符合要求 [...]

是的,他们这样做。

为此,我假设缺少的组件 [...] 隐含为 0 以进行版本比较。

正确的,6.1并且6.1.0是相同的。

如果有的话,有人可以解释语义差异吗?

在您的第一个示例中, version6.1意味着6.1.0可以使用从(inclusive)开始的所有包版本,这意味着6.1.0, 6.1.5,但也7.3.8-pre42. 由于最低适用版本规则,当有多个包符合条件时,将使用最低版本。

第二个示例不同,它使用浮动符号,这意味着6.1.*允许以 开头的所有版本6.1,但补丁预发布版本可以是任何类似6.1.5,6.1.998或 的版本6.1.1-pre42。因此,您排除以下所有版本6.1.0并从6.2.0以上版本开始,也适用于预发行版。在这里,浮动版本规则适用,恢复最高匹配版本。

总而言之,这两种表示法并不等效,第一种表示包含起始版本,而第二种表示仅允许特定版本在补丁和预发布编号上带有通配符。

  • 虽然这已基本完成,但实际上“6.1”和“6.1.*”之间的区别在于前者将采用最低匹配版本,而后者将采用最高匹配版本。在此示例中(分别为 6.1.0 和 6.1.5)https://docs.microsoft.com/en-us/nuget/concepts/dependency-resolution (2认同)