错误 NU***0***:无法找到包 <packageId>。源中不存在具有此 ID 的包:github、nuget.org

error NU***0***: Unable to find package <packageId>. No packages exist with this id in source(s): github, nuget.org

一个使用 public NUGET.ORG 包以及来自我组织的 ownnuget Github 包注册表的项目在本地恢复得很好,但在 Github 行动。这是操作的 yml 的摘录:

name: workflow1

on:
  push:
    branches: [ main ]

jobs:

  build:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: write
      packages: write
      issues: write

    steps:
      - name: Check that shit out
        uses: actions/checkout@v3
      
      - name: Set that shit up
        uses: actions/setup-dotnet@v2
        with:
          dotnet-version: '6.x.x'

      - name: Build that shit
        run: |
          dotnet nuget add source https://nuget.pkg.github.com/myorg/index.json -n github -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text
          dotnet restore ./project.sln
          dotnet build ./project.sln --no-restore --configuration Release --nologo

添加 nuget 源与推荐的相同(有效)here。不幸的是,构建步骤失败并出现这样的错误

error NU***0***: Unable to find package <packageId>. No packages exist with this id in source(s): github, nuget.org 

我也尝试过使用专用的 nuget.config 文件,而不是在 运行 上明确添加源。这也失败了,但奇怪的是,甚至没有列出 Github 包注册表。

在其他工作流程中,我还使用 GITHUB_TOKEN 到 publish/write 到 Gihub 包注册表。现在我只需要读取它,但我想权限应该没问题。

有没有想过为什么会一直崩溃?任何帮助表示赞赏!谢谢。

现在自己解决了。发帖于此可能对其他人有用。

在项目根目录创建 nuget.config,包括一个 packageSourceMapping 部分。

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <packageSources>
    <clear />
    <add key="nuget" value="https://api.nuget.org/v3/index.json" />
    <add key="github" value="https://nuget.pkg.github.com/myOrg/index.json" />
  </packageSources> 

  <packageSourceMapping>

    <packageSource key="github">
      <package pattern="packageId" />
    </packageSource>

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

</configuration>

在 GH 操作的执行中更新来源的凭据on-the-fly

name: ci

on:
  push:
    branches: [ main ]

jobs:

  build:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: write
      issues: write

    steps:
      - name: Check that shit out
        uses: actions/checkout@v3
      
      - name: Set that shit up
        uses: actions/setup-dotnet@v2
        with:
          dotnet-version: '6.x.x'

      - name: Build that shit
        run: |
          dotnet nuget update source github -u ${{ github.actor }} -p ${{ secrets.READ_GH_PACKAGES_PAT_ORG }} --store-password-in-clear-text
          dotnet restore ./project.sln
          dotnet build ./project.sln --no-restore --configuration Release --nologo

请注意,在我的情况下,我无法使用 built-in ${{ secrets.GITHUB_TOKEN }} 并且必须自己创建一个,因为包含注册表的存储库是私有的而不是 public。我还必须授权令牌在我的组织内使用。