首页 > 解决方案 > PackageReference 版本被忽略

问题描述

在我们的项目中,我们为不同的分支创建不同的 NuGet 包(使用后缀)。在 .csproj 文件中,我试图指定应该使用的包的特定版本。包名称可以是1.2.31.2.3-rc0011.2.3-pr001

第一个问题:
<PackageReference Include="Package.Name" Version="[1.2.3,1.2.6)" />在没有 1.2.3 的地方进行了测试。我的理解是它应该使用下一个可用版本,但现在它只是说选择的包是 1.2.3,带有"Not available in this source"。更新 NuGet 也会忽略这一点,而只是更新到最新版本 1.2.10。之后,它会覆盖 .csproj 中的版本,因此会丢失指定的边界。

第二个问题,属于第一个问题,是指定仅使用 -pr* 或 -rc* 版本。1.2.*-pr*不是一个有效的选项,所以也许我们的编号方案需要改变。

标签: visual-studionugetnuget-packagecsprojpackagereference

解决方案


第一个问题:我在没有 1.2.3 的地方进行了测试。我的理解是它应该使用下一个可用版本,但现在它只是说所选包是 1.2.3,并带有“此源中不可用”。

实际上,当您通过浮动版本(在您的情况下1.2.3<=version<1.2.6)设置不同版本的 nuget 包时,NuGet会选择最接近应用程序的包并忽略其他包。因此1.2.3,无论它是否存在于您当前的 nuget 缓存中,它都会进行选择。请参阅此文档

所以PackageReference不会根据你当前缓存中最接近的可用版本来引用包,并选择最新版本,不管它是否在你的本地机器下存在。

第二个问题,属于第一个问题,是指定仅使用 -pr* 或 -rc* 版本。1.2. -pr不是一个有效的选项,所以也许我们的编号方案需要改变。

目前,预发布版本不能与浮动版本一起使用。这意味着您不能将任何预发布角色与浮动版本一起使用。所以-pr*-rc*是非法的,包括1.2.*-pr*.

在使用过程中,不会出现关于预发布版本的字符。

相反,您可以使用

1.2.*-*

此外,这1.2.*-beta1也是非法的。虽然它在Dependencies UI下显示了一个版本,但在Nuget Package Manager --> Installed下找不到它,这意味着该包丢失并且项目丢失了它。

此外,还有一个类似的问题,您可以参考。


推荐阅读