TFS 2017构建时无法找到Newtonsoft.Json等NuGet包问题求助
解决TFS 2017构建中NuGet包找不到及MSB3073错误的方案
你在TFS 2017构建时碰到的这两个错误,本质上都是NuGet包还原环节出了问题,我给你梳理几个针对性的解决步骤:
1. 先解决NuGet源为空的核心问题
从错误日志里能看到-source ""是空字符串,这直接导致NuGet不知道去哪里找包。你可以这么处理:
- 直接修改构建脚本里的
nuget.exe install命令:把空的-source ""替换成有效的源地址,比如官方源-source "https://api.nuget.org/v3/index.json";如果公司有私有NuGet源,用分号把多个源隔开就行,比如-source "https://api.nuget.org/v3/index.json;http://你的私有源地址/v3/index.json" - 或者给构建代理机器配置全局NuGet源:打开命令提示符,运行
nuget sources add -name "nuget.org" -source "https://api.nuget.org/v3/index.json",后续构建会自动调用这个全局源
2. 确认指定的包版本是否真的存在
有些时候你要的版本可能已经被作者下架,或者一开始就没发布过:
- 手动验证:打开NuGet包管理器(本地或在线搜索),搜
Newtonsoft.Json,看看9.0.1版本是否存在。如果确实找不到,就修改项目里的packages.config,把版本号换成一个可用的稳定版本,比如9.0.2或者其他兼容版本
3. 修复NuGet.targets文件的配置错误
错误指向NuGet.targets(87,9),说明这个目标文件里的命令参数有问题:
- 打开
Core\Install\CSharp.nuget\NuGet.targets文件,定位到第87行附近的nuget.exe install命令,确保-source参数不是空值。你可以硬编码源地址,也可以用$(NuGetPackageSource)变量引用已配置的源 - 另外检查
-RequireConsent参数,如果不需要用户确认包还原,就改成-NoRequireConsent,避免构建过程中因为等待确认卡住
4. 清理缓存后重新还原包
缓存损坏也可能导致包找不到:
- 在构建代理机器上,清空NuGet缓存:要么直接删除默认缓存目录
C:\Users\[代理账户]\.nuget\packages,要么运行命令nuget locals all -clear一键清空所有缓存 - 建议在TFS构建定义里添加专门的「NuGet还原」步骤,放在编译步骤之前执行,优先用TFS自带的NuGet任务,比自定义
nuget.exe命令更可靠
5. 检查构建代理的网络权限
如果是内网环境的代理机器,可能没法访问外部NuGet源:
- 先测试连通性:在代理机器上用浏览器打开
https://api.nuget.org/v3/index.json,或者运行curl https://api.nuget.org/v3/index.json,确认能正常访问 - 如果有防火墙或公司代理,给构建代理配置正确的网络代理,确保NuGet能正常下载包
内容的提问来源于stack exchange,提问作者SomewhatStudent
相关产品推荐
相关产品推荐

