如何配置packages.config以下载软件包的可用最高版本?
首先得澄清一个常见误区:packages.config里的version属性并不支持直接写"Highest"这种占位符,NuGet根本识别不了这个值。而且allowedVersions的作用不是直接指定要下载的版本,而是限制后续更新时可以选用的版本范围——你之前觉得它没用,大概率是因为没配合更新命令一起操作。
下面分两种场景给你具体解决方案:
场景1:已安装包,想后续更新到最高可用版本
如果你已经安装了某个包,现在希望之后能更新到它的最新稳定版,可以修改packages.config里的配置,给目标包加上allowedVersions属性,用NuGet的版本范围语法指定允许的版本区间:
<package id="PackageName" version="当前已安装的版本号" allowedVersions="[*,)" />
这里的[*,)是版本范围的语法,表示所有大于等于0.0.0的版本(也就是不做上限限制)。之后运行NuGet命令:
Update-Package PackageName
NuGet就会自动把这个包更新到符合范围的最高稳定版本。
如果你只想限制在某个大版本内更新(比如只更到3.x系列的最高版,不升级到4.x),可以把范围改成这样:
<package id="PackageName" version="3.1.0" allowedVersions="[3.0.0,4.0.0)" />
这个范围表示版本大于等于3.0.0且小于4.0.0,更新时就只会选3.x里的最高版。
场景2:首次安装包,直接获取最新版本
如果是第一次安装这个包,没必要手动改packages.config,直接用NuGet命令或者可视化界面操作更简单:
- 命令行方式:运行以下PowerShell命令(在Package Manager Console里):
Install-Package PackageName -Version Latest - 可视化界面:在NuGet包管理器中找到目标包,版本选择"最新稳定版",点击安装即可。
安装完成后,packages.config会自动写入当前最新的版本号。如果之后想保持自动更新到最新版,再按照场景1的方法加上allowedVersions="[*,)"即可。
关于预发布版本的补充
如果你的项目允许使用预发布版本(比如beta、rc版),想要获取最新的预发布版本,需要在更新时加上-IncludePrerelease参数:
Update-Package PackageName -IncludePrerelease
同时确保你的allowedVersions范围包含预发布版本([*,)默认是包含的,只要你在NuGet设置里开启了允许预发布版本)。
内容的提问来源于stack exchange,提问作者satellite satellite

