You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps流水线中无法安装指定版本的Dotnet工具

解决.NET工具2.0.0版本安装失败(NU1301)的问题

问题概述

同一Azure DevOps Artifacts源中,foo工具的1.1.1版本可正常安装,但2.0.0版本执行安装命令时抛出NU1301错误,提示无法加载服务索引,工具包无法恢复。安装命令如下:

dotnet new tool-manifest
dotnet tool install foo --version 2.0.0 # 执行失败
dotnet tool install foo --version 1.1.1 # 执行成功

报错信息:

error NU1301: Unable to load the service index for source '...'
The tool package could not be restored.
Tool 'foo' failed to install. This failure may have been caused by:

* You are attempting to install a preview release and did not use the --version option to specify the version.
* A package by this name was found, but it was not a .NET Core tool.
* The required NuGet feed cannot be accessed, perhaps because of an Internet connection problem.
* You mistyped the name of the tool.

排查与解决方案

1. 验证2.0.0版本包的工具格式合法性

虽然包存在于Artifacts中,但可能未按照.NET工具包的规范打包:

  • 检查该版本包的.csproj配置,确认是否包含以下必要节点:
    <PackAsTool>true</PackAsTool>
    <ToolCommandName>foo</ToolCommandName>
    <PackageOutputPath>./nupkg</PackageOutputPath>
    
  • 手动下载2.0.0版本的.nupkg包,解压后查看是否包含tools目录,且对应运行时目录下存在可执行文件(如net6.0/foo.dll或foo.exe)。如果缺少这些结构,说明包不是有效的.NET工具包,需要重新打包。

2. 检查Azure DevOps Artifacts的权限设置

确认当前用户对2.0.0版本的包拥有读取权限:

  • 登录Azure DevOps,进入对应的Artifacts源,找到foo包的2.0.0版本。
  • 查看包的权限设置,确保当前用户或所在组被授予读取权限(旧版本能正常安装,可能是权限继承出现异常,新版本未自动应用权限)。

3. 清理NuGet缓存并重新尝试

NuGet缓存可能存在过期或错误的源索引信息:

  • 执行以下命令清理本地NuGet缓存:
    dotnet nuget locals all --clear
    
  • 清理后重新执行2.0.0版本的安装命令:
    dotnet tool install foo --version 2.0.0
    

4. 手动指定源地址安装

尝试在安装命令中明确指定Azure DevOps Artifacts源的URL,避免配置文件读取异常:

  • 找到Azure DevOps Artifacts源的完整URL(格式通常为https://pkgs.dev.azure.com/{组织名}/{项目名}/_packaging/{源名}/nuget/v3/index.json)。
  • 执行安装命令时添加--source参数:
    dotnet tool install foo --version 2.0.0 --source https://pkgs.dev.azure.com/xxx/xxx/_packaging/xxx/nuget/v3/index.json
    

5. 检查Azure DevOps Artifacts源的索引同步

偶尔Artifacts源的索引刷新会有延迟,导致新版本包未被索引:

  • 等待10-15分钟后重新尝试安装,或在Azure DevOps Artifacts页面手动刷新包列表。
  • 也可以通过NuGet CLI查询源中的包版本,确认2.0.0版本是否能被检索到:
    dotnet nuget list foo --version 2.0.0 --source https://pkgs.dev.azure.com/xxx/xxx/_packaging/xxx/nuget/v3/index.json
    

如果查询不到,说明源索引未同步,联系Azure DevOps管理员确认索引状态。

内容的提问来源于stack exchange,提问作者user22548444

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 09:52:55