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

切换用户执行dotnet restore无法找到指定版本Nuget包如何解决

问题诱因

  • NuGet配置分层差异:.NET的NuGet配置分为系统级、用户级、项目级三个层级,不同用户的用户级配置相互独立。默认用户的用户级NuGet.Config中已经配置了私有源MyCompanyFeed的正确访问地址、拉取正式版包的权限凭证,而gitlab-runner用户的用户级配置要么缺少对应源的配置,要么凭证权限不足,仅能拉取预览版包,无法看到1.4.4正式版本。
  • 本地缓存命中差异:默认用户此前已经成功执行过dotnet restore,1.4.4版本的包已经缓存到当前用户的NuGet本地缓存目录,执行命令时无需请求远端源直接命中缓存,因此执行成功。而gitlab-runner用户的本地缓存无对应版本包,必须请求远端源拉取才会触发找不到包的报错。
  • 清理缓存命令错误:你此前执行的dotnet nuget locals all -l中-l参数的作用是列出所有缓存目录,并非清理缓存,因此缓存问题并没有得到实际处理。

修复方案

  1. 首先对比两个用户的NuGet源配置差异,确认私有源配置一致:
    分别执行以下命令,对比输出的MyCompanyFeed地址、启用状态是否相同:
    # 默认用户执行
    dotnet nuget list source
    # gitlab-runner用户执行
    runuser gitlab-runner -c 'dotnet nuget list source'
    
    同时检查两个用户的~/.nuget/NuGet/NuGet.Config文件,确认gitlab-runner用户的配置中存在MyCompanyFeed对应的<packageSourceCredentials>凭证配置,凭证的访问权限包含正式版包拉取权限。
  2. 执行正确的缓存清理命令后重试:
    runuser gitlab-runner -c 'dotnet nuget locals all --clear'
    runuser gitlab-runner -c 'dotnet restore'
    
  3. 推荐使用项目级NuGet配置避免用户配置差异:
    在项目根目录存放NuGet.Config文件,统一配置所有需要的源信息,敏感凭证不要直接提交到代码库,可通过CI环境变量注入(比如GitLab CI中配置NUGET_AUTH_TOKEN变量,dotnet会自动识别并填充到私有源的凭证配置中),消除不同用户的配置差异问题。
  4. 确认私有源权限配置:
    如果你们的私有NuGet服务对预览版、正式版做了权限隔离,需要确认gitlab-runner使用的服务账号是否有1.4.4正式版包的拉取权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:51:00