はじめに
投稿に至った経緯
ASP.NET Core で Web API を作成する公式チュートリアルにおいて、NuGetパッケージの追加をする手順があったのだが、自分の環境の.NET SDKとバージョンが合わず入れられなかった
(前提条件に.NET 7.0 SDK
とあるので、6
を使ってた自分が悪いんだが)
その時の対処法をメモしておく
TL;DR
-
バージョン範囲や浮動バージョンの解決を参考に、
.csproj
のPackageReference
にバージョン番号を曖昧に指定しつつ、dotnet restore
する<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.*" />
-
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の編集
上記を参考にすると、.csproj
のPackageReference
には下記のように追記すれば良いとわかります
<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って自分でいじって良いの?」とまだ懐疑的です