TFS 2018 Build NuGet推送异常:临时NuGet.config文件为空求助
我来帮你梳理下这个问题的来龙去脉和解决办法:
首先,新版NuGet扩展(比如NuGetCommand@2及后续版本)生成的临时NuGet.config,并不是直接从某个固定位置复制而来,它是任务根据多源配置合并生成的:会优先读取你构建定义里配置的包源,同时合并构建代理机器上的系统级、用户级NuGet.config内容。如果合并过程中没有找到任何有效的包源配置,就会生成空的临时文件,也就是你日志里看到的警告情况。
先看你提供的日志:
2018-05-04T17:53:57.3567578Z Saving NuGet.config to a temporary config file.
2018-05-04T17:53:57.3723827Z ##[warning]No package sources were found in the NuGet.config file at D:_work\247\Nuget\tempNuGet_5662.config
这个警告明确说明任务在生成临时文件时,没有找到任何可纳入的包源配置,接下来可以从这几个方向排查解决:
检查构建定义的NuGet源配置
打开你的TFS Build定义,找到对应的NuGet任务(比如NuGet Push或NuGet Restore):- 如果选择的是「Feeds in my NuGet.config」,要确认代码仓库根目录下的
NuGet.config包含有效的<packageSources>节点; - 如果选择的是「Select a feed from Azure Artifacts/TFS」,要确保所选的包源存在且构建服务账号有访问权限。
- 如果选择的是「Feeds in my NuGet.config」,要确认代码仓库根目录下的
检查代理机器的全局NuGet.config
构建代理会尝试合并机器上的全局配置:- 系统级路径:
C:\Program Files (x86)\NuGet\Config - 用户级路径:
%USERPROFILE%\.nuget\NuGet\NuGet.config
登录到代理机器,查看这些文件是否有合法的包源配置,如果文件为空或XML格式错误,会导致临时文件生成异常。
- 系统级路径:
手动指定自定义NuGet.config
如果上述方法无效,可以在NuGet任务的「Advanced」选项卡中,手动指定一个包含有效包源的NuGet.config路径。示例配置如下:<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="YourTargetFeed" value="https://your-tfs-instance/tfs/Collection/_packaging/YourFeed/nuget/v3/index.json" /> </packageSources> </configuration>升级NuGet任务版本
你使用的是2018年的任务版本,当时的新版NuGet扩展可能存在一些配置合并的已知bug,建议升级到最新稳定版的NuGet任务,这类问题在后续版本中大多被修复了。
内容的提问来源于stack exchange,提问作者Brian Russell

