ushibutatorism

がんばって言語化するぞ(カテゴリごちゃ混ぜです)

error NU1101: Unable to find package {MyPackage}. No packages exist with this id in source(s): nuget.org [....sln]

GitHubActionsで.NET Coreアプリケーションをビルドしようとすると、自前のNuGetサーバからパッケージを取得できない。

構成

自前でNuGetパッケージを作成し、nuget.orgではなく自身で管理するサーバに配置して利用している。

[image(気が向いたら描く)]

事象

以下のようなworkflowを作成して、.NETのコードをビルドしようとする。

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - ...
    - name: Build
      run: |
        cd ./src/... # solution directory
        dotnet build

以下のようなエラーが起こる。

dotnet build
...
/home/runner/work/....csproj : error NU1101: Unable to find package {MyPackage}. No packages exist with this id in source(s): nuget.org [/home/runner/work/....sln]

対応

dotnet build を実行する前に、 dotnet restore を実行する。
その際、 -s|--source オプションで自前のNuGetサーバを指定する。
(NuGetサーバのURLは環境変数に設定しておく)

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      ...
      run: |
        cd ./src/... # solution directory
        dotnet restore -s https://api.nuget.org/v3/index.json -s ${MY_NUGET_SOURCE}
        dotnet build
      env:
        MY_NUGET_SOURCE: ${{ secrets.MY_NUGET_SOURCE }}  # https://mynugetserver/nuget

ハマったところ

以下の対応で解決しなくて、しばらくハマってました。

NuGet CLI ソースコマンド | Microsoft Docs

nuget sources Add -Name "MyServer" -Source \myserver\packages

備考

NuGetサーバに認証をかけた場合は検証していません。