LoginSignup
0
0

More than 1 year has passed since last update.

Azure PipelinesでNugetがないとか、error NETSDK1064: パッケージ〜〜が見つかりませんでした。とか言われる

Last updated at Posted at 2022-04-12

いい加減にCI/CDに取り組もうといろいろ試行錯誤中…
単一のリポジトリなら楽なんだけど、複数ってなるといろいろ躓く。大変。

pipelines.ymlを頑張って書く

最初はテンプレから起こす。

複数リポジトリからのビルド

次はこれ。
例えば、メインプロジェクトAがフォルダーが違うプロジェクトBを参照しているような時


├── A
│   ├── ~~~~
├── B
│   ├── ~~~~

公式にあるように複数リポジトリの定義を追加

resources:
  repositories:
  - repository: sampleLib
    type: git
    name: sampleLib/sampleLib
    ref:  master

steps:
- checkout: self
- checkout: sampleLib

複数リポジトリにする場合はcheckout: selfもしておかないとメインがCheckoutされないので注意
参考)https://github.com/microsoft/azure-pipelines-yaml/blob/master/design/multi-checkout.md

はまったところ

セルフホステッドのAgent使っていると、途中のビルド失敗などでチェックアウトしたソースが残ってたりする。
そのため変な場所にある*.slnを読み込んだりしてビルドに失敗する。
そういう場合はAgentのワークフォルダ(_work)をまるごと削除してしまう。(リネームでもOK)
変なファイルを読み込んでいないかはビルドログを詳細に見ればわかる。

nugetでとれていないパッケージがある?

Buildステージで失敗する。
単一のときは失敗しなかったのになんで?

##[error]C:\Program Files\dotnet\sdk\6.0.201\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(267,5): 
Error NETSDK1064: パッケージ Microsoft.AspNetCore.Components.Analyzers、バージョン 3.1.6 が見つかりませんでした。
NuGet の復元により、削除された可能性があります。それ以外の場合、NuGet の復元が最大パス長の制限のために一部分しか完了していない可能性があります。

Nugetの復元がうまくいってない?と思って、以下のコードを追加した(がこれもうまくいかなかった)
参考にしたURL)https://github.com/MicrosoftDocs/azure-devops-docs/blob/main/docs/pipelines/packages/nuget-restore.md

- task: DotNetCoreCLI@2
  displayName: dotnet restore
  inputs:
    command: restore
    projects: '**/*.csproj'
    feedsToUse: 'select'
    vstsFeed: '<projectName>/<feedName>'
    includeNuGetOrg: true

これを入れるとむしろ別のエラーが…

2022-04-11T15:14:47.5379548Z          NuGet.Configuration.NuGetConfigurationException: 
NuGet.Config が妥当な XML ではありません。
パス: 'C:\Users\hoge\source\vsts-agent-win-x64-2.202.0\_work\1\Nuget\tempNuGet_82.config'。

これもググれば出るような方法をやったがだめ。
なので上記のtaskは消した。

うまくいった方法

https://docs.microsoft.com/ja-jp/dotnet/core/tools/sdk-errors/netsdk1064
なんとかこのページに行き着いた。
やはりNugetの復元まわりみたい。なんで上のtaskだとうまくいかないのかわけわからん。

もう一行ビルドタスクを追加して、restoreさせた。
(restoreだけ追加したらビルドされずrestoreだけさせたので、別のタスクとして定義)

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/t:restore'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

msbuildArgsのところに/t:restoreを指定している。
これでうまくいった。やっとできた。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0