概要
チュートリアル: ASP.NET Core で Web API を作成する | Microsoft Docs
の「コントローラーのスキャフォールディング」(Visual Studio Code)で実行するコマンドの一部に誤記がある.本稿では,上記ドキュメントに従って実行した場合に生じるエラーと,エラーの解消方法(すなわち,ドキュメントの誤り)について述べる.
なお,本記事で取り上げる誤りは,英語版では修正済みである.
Tutorial: Create a web API with ASP.NET Core | Microsoft Docs
詳細
以下,チュートリアル: ASP.NET Core で Web API を作成する | Microsoft Docsの「コントローラーのスキャフォールディング」(Visual Studio Code)の前までは完了しているものとする.
発生するエラー
コントローラーのスキャフォールディングのVisual Studio Codeタブには,次のような指示がある.
ここまでの変更内容がすべて保存されていることを確認します。
プロジェクト フォルダー (
TodoApi
フォルダー) から次のコマンドを実行します。.NET CLIdotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design --prerelease dotnet add package Microsoft.EntityFrameworkCore.Design --prerelease dotnet add package Microsoft.EntityFrameworkCore.SqlServer --prerelease dotnet tool install -g dotnet-aspnet-codegenerator --version 6.0.0-preview.7.21413.1 dotnet aspnet-codegenerator controller -name TodoItemsController -async -api -m TodoItem -dc TodoContext -outDir Controllers
上のコマンドでは以下の操作が行われます。
- スキャフォールディングに必要な NuGet パッケージを追加します。
- スキャフォールディング エンジン (
dotnet-aspnet-codegenerator
) をインストールします。TodoItemsController
をスキャフォールディングします。
上記のコマンドを順番に実行していくと,最後の
dotnet aspnet-codegenerator controller -name TodoItemsController -async -api -m TodoItem -dc TodoContext -outDir Controllers
で次のようなエラーが生じる.
Scaffolding failed.
Failed to get Project Context for C:\Users\username\TodoApi\TodoApi.csproj.
To see more information, enable tracing by setting environment variable 'codegen_trace' = 1.
RunTime 00:00:02.69
エラー内の指示通り,環境変数 codegen_trace
を1にセットして実行すると,次のような表示になる.
C:\Users\username\TodoApi>set codegen_trace=1
C:\Users\username\TodoApi>dotnet aspnet-codegenerator controller -name TodoItemsController -async -api -m TodoItem -dc TodoContext -outDir Controllers
[Trace]: Command Line: controller -name TodoItemsController -async -api -m TodoItem -dc TodoContext -outDir Controllers
Scaffolding failed.
Failed to get Project Context for C:\Users\username\TodoApi\TodoApi.csproj.
[Trace]: at Microsoft.Extensions.ProjectModel.MsBuildProjectContextBuilder.Build() in /_/src/Shared/Microsoft.DotNet.Scaffolding.Shared/MsBuild/MsBuildProjectContextBuilder.cs:line 55
at Microsoft.VisualStudio.Web.CodeGeneration.Tools.Program.GetProjectInformation(String projectPath, String configuration) in /_/tools/dotnet-aspnet-codegenerator/Program.cs:line 291
at Microsoft.VisualStudio.Web.CodeGeneration.Tools.Program.BuildAndDispatchDependencyCommand(String[] args, String projectPath, String buildBasePath, String configuration, Boolean noBuild, ILogger logger) in /_/tools/dotnet-aspnet-codegenerator/Program.cs:line 174
at Microsoft.VisualStudio.Web.CodeGeneration.Tools.Program.<>c__DisplayClass19_0.<Execute>b__0() in /_/tools/dotnet-aspnet-codegenerator/Program.cs:line 130
RunTime 00:00:03.40
残念ながら,トレースを見ても原因はわかりそうにない😭
原因
この現象はGitHubでイシューが出されており,既にドキュメント修正のプルリクエストもマージされ,英語版ドキュメントも修正済みである.ただし,本記事執筆時点では,日本語版ドキュメントは未修正である.
イシューの記述によれば,エラーの原因は dotnet-aspnet-codegenerator
のバージョンが古いことのようだ.
解消方法
dotnet-aspnet-codegenerator
は,エラーが発生したコマンドの一つ前に実行した
dotnet tool install -g dotnet-aspnet-codegenerator --version 6.0.0-preview.7.21413.1
でインストールしている.従って,エラーの解消方法は
-
dotnet-aspnet-codegenerator
のバージョン6.0.0-preview.7.21413.1
をアンインストール -
dotnet-aspnet-codegenerator
のバージョン6.0.1
をインストール
となる.以下,その詳細を記載する.
アンインストール
次のコマンドを実行する.
dotnet tool uninstall -g dotnet-aspnet-codegenerator
アンインストールが正常に完了すると,次のように表示される.
C:\Users\username\TodoApi>dotnet tool uninstall -g dotnet-aspnet-codegenerator
ツール 'dotnet-aspnet-codegenerator' (バージョン '6.0.0-preview.7.21413.1') は正常にアンインストールされました。
インストール
次のコマンドを実行する.
dotnet tool install -g dotnet-aspnet-codegenerator --version 6.0.1
インストールが正常に完了すると,次のように表示される.
C:\Users\username\TodoApi>dotnet tool install -g dotnet-aspnet-codegenerator --version 6.0.1
次のコマンドを使用してツールを呼び出せます。dotnet-aspnet-codegenerator
ツール 'dotnet-aspnet-codegenerator' (バージョン '6.0.1') が正常にインストールされました。
動作確認
エラーが解消されるか確認するため,再び次のコマンドを実行してみる.
dotnet aspnet-codegenerator controller -name TodoItemsController -async -api -m TodoItem -dc TodoContext -outDir Controllers
問題なくコントローラー TodoItemsController.cs
が作成されれば成功である.