0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[備忘録] [.NET] NuGetパッケージを追加したいが、.NET SDKとのバージョン不一致で困った時の解決策

Posted at

はじめに

投稿に至った経緯

ASP.NET Core で Web API を作成する公式チュートリアルにおいて、NuGetパッケージの追加をする手順があったのだが、自分の環境の.NET SDKとバージョンが合わず入れられなかった
(前提条件に.NET 7.0 SDKとあるので、6を使ってた自分が悪いんだが)

その時の対処法をメモしておく

TL;DR

  1. バージョン範囲浮動バージョンの解決を参考に、.csprojPackageReferenceにバージョン番号を曖昧に指定しつつ、dotnet restoreする
    • <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.*" />
  2. NuGetのGalleryにアクセスし、対応するバージョンを探して、dotnet addするときにバージョン番号を指定する

1. .csprojのPackageReferenceにバージョン番号を曖昧に指定しつつ、dotnet restoreする

エラー内容の把握

今回で言うと、dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design -v 7.0.0-*をやろうとして、下記のように怒られました

error: NU1202: パッケージ Microsoft.VisualStudio.Web.CodeGeneration.Design 7.0.0 は net6.0 (.NETCoreApp,Version=v6.0) と互換性がありません。 パッケージ Microsoft.VisualStudio.Web.CodeGeneration.Design 7.0.0 がサポートするもの: net7.0 (.NETCoreApp,Version=v7.0)
error: パッケージ 'Microsoft.VisualStudio.Web.CodeGeneration.Design' はプロジェクト '/Users/XXXXX/workspace/ToDoApi/ToDoApi.csproj' の 'all' フレームワークとの互換性がありません。

「あ、パッケージのメジャーバージョンが.NETのバージョンと対応してるのか」と勘づき、ならば6系の最新を入れてあげればいいな、と判断できました

.NET SDKバージョンに対応するパッケージの追加

.csprojの編集

上記を参考にすると、.csprojPackageReferenceには下記のように追記すれば良いとわかります

<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.*" />
→メジャーバージョン6の最新を追加する

依存関係の修復

dotnet restoreについての公式の説明は以下です

dotnet restore コマンドでは NuGet を使用して、依存関係と、プロジェクト ファイルに指定されているプロジェクト固有のツールを復元します。

$ dotnet restore                                                                
  復元対象のプロジェクトを決定しています...
  /Users/XXXXX/workspace/ToDoApi/ToDoApi.csproj を復元しました (408 ms)。

$ dotnet list package                                                           
プロジェクト 'ToDoApi' に次のパッケージ参照が含まれています
   [net6.0]: 
   最上位レベル パッケージ                                            要求済み    解決済み  
   > Microsoft.EntityFrameworkCore.Design                  7.0.1   7.0.1 
   > Microsoft.EntityFrameworkCore.InMemory                7.0.1   7.0.1 
   > Microsoft.EntityFrameworkCore.SqlServer               7.0.1   7.0.1 
   > Microsoft.VisualStudio.Web.CodeGeneration.Design      6.*     6.0.11
   > Swashbuckle.AspNetCore                                6.2.3   6.2.3 

要求しているのは6.*と曖昧な指定ですが、実際に追加されたのは6.0.11であることが分かります

2. NuGetのGalleryにアクセスし、対応するバージョンを探して、dotnet addするときにバージョン番号を指定する

NuGet Galleryにアクセス

追加したいパッケージを検索して、バージョン一覧を参照する

追加したい正確なバージョンを把握します

バージョンを指定してdotnet addする

$ dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design -v 6.0.11
復元対象のプロジェクトを決定しています...
...略...

$ dotnet list package                                                          
プロジェクト 'ToDoApi' に次のパッケージ参照が含まれています
   [net6.0]: 
   最上位レベル パッケージ                                            要求済み     解決済み  
   > Microsoft.EntityFrameworkCore.Design                  7.0.1    7.0.1 
   > Microsoft.EntityFrameworkCore.InMemory                7.0.1    7.0.1 
   > Microsoft.EntityFrameworkCore.SqlServer               7.0.1    7.0.1 
   > Microsoft.VisualStudio.Web.CodeGeneration.Design      6.0.11   6.0.11
   > Swashbuckle.AspNetCore                                6.2.3    6.2.3 

さいごに

Nodeのpackage.jsonに慣れていたので、「.csprojって自分でいじって良いの?」とまだ懐疑的です

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?