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

同一GitHub组织下仓库A如何访问仓库B的NuGet包?

解决同一GitHub组织下私有仓库NuGet包跨仓库访问问题

问题描述

我在GitHub同一组织下拥有两个私有仓库repo A和repo B,已向repo A发布两个NuGet包,向repo B发布一个NuGet包。repo A可以正常安装自身的包,但无法访问repo B的包,执行dotnet build时出现以下错误:

error NU1101: Unable to find package {{PackageId}}. No packages exist with this id in source(s): github. PackageSourceMapping is enabled, the following source(s) were not considered: /usr/local/share/dotnet/library-packs, nuget.org.

我的nuget.config文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageSources>
        <clear />
        <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
        <add key="github" value="https://nuget.pkg.github.com/{{orgname}}/index.json" />
    </packageSources>

    <packageSourceCredentials>
        <github>
            <add key="Username" value="{{USERNAME}}" />
            <add key="ClearTextPassword" value="{{TOKEN}}" />
        </github>
    </packageSourceCredentials>

    <packageSourceMapping>
        <packageSource key="github">
            <package pattern="{{OrgName}}.*" />
        </packageSource>

        <packageSource key="nuget.org">
            <package pattern="*" />
        </packageSource>
    </packageSourceMapping>
</configuration>

我的PAT拥有repo和write:packages权限且无过期时间,将包可见性改为internal也无法解决问题,请问如何让repo A访问repo B中的NuGet包?

解决方案

1. 检查包ID匹配规则

确认repo B中发布的NuGet包ID严格以组织名称开头(注意大小写敏感)。当前包源映射使用{{OrgName}}.*的通配符,如果包ID前缀与组织名不一致,NuGet会跳过从github源查找该包。

2. 验证PAT对repo B的访问权限

虽然PAT拥有repo权限,仍需确认其授权范围包含repo B:

  • 替换占位符后,用该PAT访问包的下载链接:https://nuget.pkg.github.com/{{orgname}}/download/{{PackageId}}/{{version}}/{{PackageId}}.nupkg,能下载则权限正常,否则需检查PAT的仓库访问范围是否覆盖repo B。

3. 配置包的仓库访问权限

在GitHub组织的包管理界面,找到repo B发布的包,进入"Access control"设置,将repo A添加到允许访问的仓库列表中。即使包可见性设为internal,也需要明确授权目标仓库访问。

4. 清除NuGet缓存

执行以下命令清除本地缓存,避免缓存导致的查找异常:

dotnet nuget locals all --clear

之后重新运行dotnet restore或dotnet build。

5. 排查包源映射配置

暂时注释掉packageSourceMapping节点的内容,执行dotnet build测试。如果此时能找到包,说明问题出在映射规则上,需调整pattern确保覆盖repo B的包ID(比如改为更宽松的*{{OrgName}}*,或直接指定具体包ID)。

6. 检查NuGet版本

确保使用的NuGet版本为6.0及以上(包源映射功能需要该版本支持),执行dotnet nuget --version查看版本,必要时升级.NET SDK。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:35:55