1
1

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 3 years have passed since last update.

VSCode向け “チュートリアル: ASP.NET Core で Web API を作成する” 日本語版の誤記

Posted at

概要

チュートリアル: 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 CLI
dotnet 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

でインストールしている.従って,エラーの解消方法は

  1. dotnet-aspnet-codegenerator のバージョン 6.0.0-preview.7.21413.1 をアンインストール
  2. 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 が作成されれば成功である.

参考

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?