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

dotnet add package -s指定GitHub私有NuGet源安装包失败

失效原因
  • GitHub私有NuGet源对匿名包查询请求直接返回空列表,不会返回权限不足类错误。单独使用-s参数指定源时,无论传入值是配置中的源名称还是源完整URL,dotnet CLI都不会自动加载全局NuGet.config中存储的对应源凭据,会以匿名方式发起包版本查询,拿到空结果后直接抛出“There are no versions available for the package”错误。
  • 不指定-s参数、私有源排在源列表首位时可正常安装,是因为CLI走全局源合并查询逻辑时,会按配置顺序遍历源,遍历到私有源时会自动加载已存储的认证凭据发起请求,查到包后直接终止后续查询,不会访问nuget.org。
  • 常见配置错误:如果配置的源地址缺少/index.json后缀(例如错写为https://nuget.pkg.github.com/your-org,正确格式应为https://nuget.pkg.github.com/your-org/index.json),也会触发单独指定源时查询失败的问题。
适配自动化脚本的修复方案

以下方案可完全不受用户本地源顺序影响,彻底避免拉取到nuget.org同名包:

  • 方案一:临时专用配置文件安装(优先选择,无侵入)
    脚本运行时动态生成临时NuGet配置文件,通过<clear />标签清空所有继承的全局源,仅保留GitHub私有源及对应凭据,安装完成后删除临时文件即可,不会修改用户本地全局配置。
    临时配置文件示例:
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <packageSources>
        <clear />
        <add key="github" value="https://nuget.pkg.github.com/你的组织或用户名/index.json" />
      </packageSources>
      <packageSourceCredentials>
        <github>
          <add key="Username" value="%GITHUB_USERNAME%" />
          <add key="ClearTextPassword" value="%GITHUB_TOKEN%" />
        </github>
      </packageSourceCredentials>
    </configuration>
    
    安装命令:
    dotnet add package 目标包名 --configfile ./temp.nuget.config
    
    前置要求:用户需提前配置具备read:packages权限的GITHUB_TOKEN环境变量。
  • 方案二:显式更新源凭据后指定源安装
    若允许修改用户本地NuGet全局配置,可在安装前先显式写入私有源的凭据配置,再通过-s指定源安装:
    dotnet nuget update source github `
      --username $env:GITHUB_USERNAME `
      --password $env:GITHUB_TOKEN `
      --store-password-in-clear-text
    dotnet add package -s github 目标包名
    
    注意:该操作会永久修改用户本地的NuGet源配置,脚本中使用需提前告知。
避坑说明

禁止在安装命令中通过多次传-s参数同时指定私有源和nuget.org公共源,该场景下CLI会自动选择版本号最高的包,若公共源存在同名更高版本包,依然会拉取错误来源的包,无法满足来源强校验要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 01:51:24