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

# 概要
[チュートリアル: ASP.NET Core で Web API を作成する | Microsoft Docs](https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/first-web-api?view=aspnetcore-6.0&tabs=visual-studio-code)
の「[コントローラーのスキャフォールディング](https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/first-web-api?view=aspnetcore-6.0&tabs=visual-studio-code#scaffold-a-controller)」（Visual Studio Code）で実行するコマンドの一部に誤記がある．本稿では，上記ドキュメントに従って実行した場合に生じるエラーと，エラーの解消方法（すなわち，ドキュメントの誤り）について述べる．

なお，本記事で取り上げる誤りは，英語版では修正済みである．
[Tutorial: Create a web API with ASP.NET Core | Microsoft Docs](https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-6.0&tabs=visual-studio-code#scaffold-a-controller)

# 詳細
以下，[チュートリアル: ASP.NET Core で Web API を作成する | Microsoft Docs](https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/first-web-api?view=aspnetcore-6.0&tabs=visual-studio-code)の「[コントローラーのスキャフォールディング](https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/first-web-api?view=aspnetcore-6.0&tabs=visual-studio-code#scaffold-a-controller)」（Visual Studio Code）の前までは完了しているものとする．

## 発生するエラー
[コントローラーのスキャフォールディング](https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/first-web-api?view=aspnetcore-6.0&tabs=visual-studio-code#scaffold-a-controller)のVisual Studio Codeタブには，次のような指示がある．

>ここまでの変更内容がすべて保存されていることを確認します。
>
>プロジェクト フォルダー (`TodoApi` フォルダー) から次のコマンドを実行します。
>
>```:.NET&#x20;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でイシューが出されており](https://github.com/dotnet/AspNetCore.Docs/issues/24418)，既に[ドキュメント修正のプルリクエストもマージされ](https://github.com/dotnet/AspNetCore.Docs/pull/24419)，[英語版ドキュメント](https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-6.0&tabs=visual-studio-code#scaffold-a-controller)も修正済みである．ただし，本記事執筆時点では，[日本語版ドキュメント](https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/first-web-api?view=aspnetcore-6.0&tabs=visual-studio-code#scaffold-a-controller)は未修正である．

イシューの記述によれば，エラーの原因は `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` が作成されれば成功である．

# 参考
- [チュートリアル: ASP.NET Core で Web API を作成する | Microsoft Docs](https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/first-web-api?view=aspnetcore-6.0&tabs=visual-studio-code)
    - 英語版: [Tutorial: Create a web API with ASP.NET Core | Microsoft Docs](https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-6.0&tabs=visual-studio-code)
- [Issue in dotnet-aspnet-codegenerator version · Issue #24418 · dotnet/AspNetCore.Docs](https://github.com/dotnet/AspNetCore.Docs/issues/24418)