Visual Studio 2017编译GitHub项目首次遇NuGet版本报错的解决诉求
解决VS2017首次编译NuGet版本不兼容报错的根源方案
我之前也碰到过一模一样的情况——VS2017配了对应最新NuGet,第一次编译总是弹版本不够的错,第二次就正常。这本质是NuGet缓存、项目配置同步或者VS加载顺序的小bug,下面几个方法能从根源搞定:
清理并重新还原NuGet缓存
有时候本地缓存的旧版本包会干扰识别,先手动清理:- 打开VS2017的「工具」→「选项」→「NuGet包管理器」→「常规」,点击「清除所有NuGet缓存」
- 右键项目→「管理NuGet程序包」,切换到「已安装」标签,确认所有包都是最新兼容版本,然后点击「还原」
- 也可以用命令行更彻底:打开「开发者命令提示符」,运行
nuget locals all -clear,再回到项目右键「还原NuGet包」
修改项目文件的NuGet目标版本配置
有些项目从高版本VS迁移过来,.csproj里的NuGet目标版本可能没更新到VS2017支持的最高值:- 右键项目→「卸载项目」,再右键→「编辑.csproj」
- 找到类似
<NuGetToolVersion>x.x.x</NuGetToolVersion>的节点,把版本号改成你当前NuGet的版本(可以在「工具」→「NuGet包管理器」→「包管理器设置」里看当前版本) - 保存后重新加载项目
调整VS的NuGet包管理器设置
让VS在加载项目时自动强制还原依赖,避免第一次编译时依赖未就绪:- 打开「工具」→「选项」→「NuGet包管理器」→「常规」
- 勾选「在生成前自动还原NuGet包」和「允许NuGet下载缺失的包」
- 切换到「包管理器控制台」标签,确保「默认项目」是你的主项目,然后运行
Update-Package -reinstall重新安装所有包,保证依赖和当前NuGet版本匹配
删除项目的.vs和bin/obj目录
VS的本地缓存目录(.vs)有时候会存旧的配置信息,导致加载异常:- 关闭VS,找到项目根目录,删除
.vs文件夹(隐藏文件夹,需要显示隐藏项) - 删除项目下的
bin和obj目录 - 重新打开VS,加载项目后先做一次「生成解决方案」,再编译
- 关闭VS,找到项目根目录,删除
这些方法基本能解决第一次编译的版本报错问题,本质是让NuGet在项目加载阶段就完成正确的依赖识别和还原,而不是等到第一次编译才触发检查。
内容的提问来源于stack exchange,提问作者Harry Ramsey
相关产品推荐
相关产品推荐

