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

如何将自定义包加入GitHub Workflow?解决.NET Core工作流包找不到问题

解决GitHub Actions中.NET Core项目找不到自定义GitHub包的问题

别担心,仅仅在csproj里添加包引用确实不够——因为GitHub Packages默认需要授权访问,而且工作流环境里并不会自动识别你的私有包源。我之前也踩过这个坑,下面给你一步步讲清楚该怎么操作:

一、先搞定访问权限

首先得确保你的GitHub Actions有读取自定义包的权限:

  • 如果你的自定义包和WebAPI仓库同属一个GitHub账号/组织,那直接用工作流自带的GITHUB_TOKEN就行,它默认带有read:packages权限,但要确认包仓库的设置里允许同组织的Actions访问(一般默认是开启状态)。
  • 如果包在另一个账号/私有仓库里,那得创建一个Personal Access Token (PAT):在GitHub账号的Settings → Developer settings → Personal access tokens里生成,勾选read:packages权限,然后把这个PAT添加到WebAPI仓库的Secrets里(比如命名为PACKAGE_READ_TOKEN)。

二、在工作流中配置包源和认证

接下来要在工作流的Install Dependencies步骤前,添加一个步骤来配置NuGet源指向GitHub Packages,同时注入认证信息:

方法1:直接在工作流中用命令添加源

在你的工作流yaml里,加入这一步:

- name: Add GitHub Packages NuGet Source
  run: |
    # 如果用GITHUB_TOKEN(同组织/账号场景)
    dotnet nuget add source --username ${{ github.actor }} --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/你的GitHub用户名或组织名/index.json"
    
    # 如果用自定义PAT(跨组织/私有包场景),替换成下面的命令
    # dotnet nuget add source --username ${{ github.actor }} --password ${{ secrets.PACKAGE_READ_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/你的GitHub用户名或组织名/index.json"

这里的--store-password-in-clear-text是因为GitHub Actions的环境里没有安全存储密码的机制,不用担心泄露——密码要么是临时的GITHUB_TOKEN,要么是存在Secrets里的加密内容。

方法2:用NuGet.config文件管理源

如果你习惯用NuGet.config统一管理包源,可以在项目根目录创建这个文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="github" value="https://nuget.pkg.github.com/你的GitHub用户名或组织名/index.json" />
  </packageSources>
  <packageSourceCredentials>
    <github>
      <add key="Username" value="你的GitHub用户名" />
      <add key="ClearTextPassword" value="%PACKAGE_TOKEN%" />
    </github>
  </packageSourceCredentials>
</configuration>

然后在工作流里,执行dotnet restore前,先把Secrets里的token注入到环境变量:

- name: Set Package Token Env Var
  run: echo "PACKAGE_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> $GITHUB_ENV
  # 用PAT的话就改成 secrets.PACKAGE_READ_TOKEN

三、确认csproj里的引用没问题

虽然你已经加了引用,但再检查一下:包的ID要和GitHub Packages里显示的完全一致,版本号也要精确匹配(比如1.0.0),示例如下:

<PackageReference Include="你的自定义包ID" Version="1.0.0" />

完整的工作流示例

给你一个整合好的参考模板:

name: .NET Core WebAPI CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4

    - name: Setup .NET Core
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: '8.x' # 替换成你的.NET版本

    - name: Add GitHub Packages NuGet Source
      run: |
        dotnet nuget add source --username ${{ github.actor }} --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/你的组织名/index.json"

    - name: Install Dependencies
      run: dotnet restore YourWebAPI.csproj # 替换成你的项目路径

    - name: Build
      run: dotnet build --configuration Release --no-restore

    - name: Run Tests
      run: dotnet test --configuration Release --no-restore --verbosity normal

额外注意点

  • 如果你用的是组织账号,包源URL里要写组织名,而不是个人用户名。
  • 绝对不要把token明文写在任何文件里,一定要用GitHub Secrets来管理敏感信息。
  • 如果还是找不到包,先检查包是否真的成功推送到GitHub Packages了,版本号有没有输入错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:13:15