ASP.NET Core MVC の学習中に Visual Studio で「新しい Scaffolded Item…」を開こうとした瞬間エラーで止まる──そんな“進めない”状態を、手戻りなく解消するための決定版ガイドです。原因の切り分け順、相性のよいパッケージ構成、ログの取り方、キャッシュ復旧、最後の手段までを一気通貫で整理し、最短経路で再び足を動かせるようにします。
現象とスコープ
対象は Visual Studio 2022 Community(17.x 系)で、ASP.NET Core MVC プロジェクトの [追加]→[新しい Scaffolded Item…] 実行時にエラー ダイアログが表示され、ウィザードが開かない問題です。プロジェクト作成直後/テンプレート変更後/VS 再インストール後でも再現するケースを含みます。
代表的なエラーメッセージ例(英語 UI/日本語 UI 混在):
Could not load file or assembly 'Microsoft.VisualStudio.Web.CodeGeneration.Utils, Version=...'
Package restore failed. Rolling back...
このコマンドは現在のコンテキストではサポートされていません。
Scaffolding initialization failed. See Output window for details.
原因の全体像(まず“どの層”が壊れているかを把握)
| # | 想定原因レイヤー | 具体例 | 起こりやすい兆候 |
|---|---|---|---|
| 1 | 必須ワークロードの不足/破損 | ASP.NET & Web 開発、.NET デスクトップ開発の未導入・ファイル破損 | 他の Web テンプレートでも追加機能が出ない、修復で改善することが多い |
| 2 | Scaffolding 関連 NuGet の不整合 | Microsoft.VisualStudio.Web.CodeGeneration.Design や EF Core ツールのバージョン不一致 | 出力ウィンドウにアセンブリ解決失敗、SDK/TargetFramework のメジャー違い |
| 3 | 初回起動プロファイル/拡張の不整合 | C# 開発プロファイル選択後に拡張が正しく登録されない一過性の事例 | クリーン再インストール+General プロファイルで復旧する |
| 4 | IDE キャッシュ/設定破損 | ComponentModelCache 破損、MEF キャッシュ異常、ユーザー設定競合 | 安全モードで発生しない、キャッシュ初期化で改善 |
| 5 | プロジェクト種別のミスマッチ | “MVC” ではなく Minimal API/空テンプレートで必要コンポーネント不足 | メニューは出るがウィザード選択肢が少ない/失敗する |
| 6 | ネットワーク/パッケージ ソース障害 | プロキシ/社内リポジトリのみ有効、nuget.org が無効 | 復元が遅い/失敗、オフラインで特に再現しやすい |
最短解決ルート(クイックチェックリスト)
- ワークロードの確認・追加(VS インストーラの Modify/変更)
- ASP.NET & Web 開発
- .NET デスクトップ開発
- (DB を使う場合)Data storage & processing
- NuGet の整合性を確保(プロジェクトごとに)
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design --version 9.* dotnet add package Microsoft.EntityFrameworkCore.Design --version 9.* dotnet add package Microsoft.EntityFrameworkCore.Tools --version 9.* dotnet add package Microsoft.EntityFrameworkCore.SqlServer --version 9.* // or SqliteVS の GUI で更新しても構いません。更新後にdotnet restore。 - 出力ウィンドウで具体的な失敗点を特定(表示 → 出力、表示対象:パッケージ マネージャー など)
- キャッシュ初期化(効果大)
// VS を終了してから実行/手動で削除 %LOCALAPPDATA%\Microsoft\VisualStudio\17.0_*\ComponentModelCache %LOCALAPPDATA%\Microsoft\VisualStudio\17.0_* (必要に応じて別場所へ退避) %LOCALAPPDATA%\Microsoft\VSCommon\MEFCache // NuGet キャッシュ dotnet nuget locals all --clear - プロジェクト種別を確認(ASP.NET Core Web App (Model-View-Controller) で作成されているか)
- クリーン再インストール(最後の手段)
- アプリと機能 → Visual Studio 2022 → 完全アンインストール(ユーザーデータも削除)
- 再インストール後、初回設定は General を選択
- ワークロード再適用 → プロジェクトで再確認
NuGet と TargetFramework の“揃え方”が最重要
Scaffolding は内部で Microsoft.VisualStudio.Web.CodeGeneration.* と EF Core のデザイン時パッケージを呼び出します。ターゲット フレームワーク(TFM)のメジャーと関連 NuGet のメジャーは原則一致が安全です。以下は実務的な対応表です。
| TargetFramework | CodeGeneration.Design | EF Core (Design/Tools/Provider) | 備考 |
|---|---|---|---|
net6.0 | 6.x | 6.x | LTS 向け。新規は 8 以降推奨 |
net7.0 | 7.x | 7.x | メンテ終了環境での既存資産 |
net8.0 | 8.x | 8.x | LTS。安定優先なら 8.x を選択 |
net9.0 | 9.x | 9.x | 最新機能重視。記事内の推奨は 9.0.0 以上 |
プロジェクト ファイル(.csproj)の例:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="9.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.0" />
<!-- or Sqlite -->
</ItemGroup>
</Project> </code></pre>
<h2>ワークロードの確認・修復(最優先)</h2>
<ol>
<li><em>Visual Studio Installer</em> を起動 → 対象の VS 2022 の <strong>Modify</strong>。</li>
<li>以下にチェックが入っているか確認し、抜けがあれば追加して適用。
<ul>
<li><strong>ASP.NET & Web 開発</strong></li>
<li><strong>.NET デスクトップ開発</strong></li>
<li>(必要に応じて)<strong>Data storage & processing</strong>(EF/SQL ツール類)</li>
</ul>
</li>
<li><strong>Repair</strong>(修復)も有効です。インストーラ完了後に PC 再起動 → VS を再起動。</li>
</ol>
<h2>出力ウィンドウ/ログで“何が”落ちているかを観測</h2>
<p>再現直後、<em>表示 → 出力</em> で <em>ソース</em> を <strong>パッケージ マネージャー</strong> または <strong>ASP.NET Core Web Tools</strong> に切り替え、アセンブリ読み込み失敗やアクセス拒否の具体名を特定します。さらに詳細が欲しければ次のようにアクティビティ ログを出力します。</p>
<pre><code>"Developer Command Prompt for VS 2022" を管理者で起動
devenv /log
// ログ出力先(例)
%APPDATA%\Microsoft\VisualStudio\17.0_*\ActivityLog.xml
</code></pre>
<p>ここで <code>Microsoft.VisualStudio.Web.CodeGeneration.*</code> の読み込み例外、MEF エラー、拡張コンポーネントの不整合などが見つかれば、以降のキャッシュ初期化/再インストールの判断が容易になります。</p>
<h2>キャッシュ/設定をクリーンアップ(安全・強力)</h2>
<p>VS を完全に終了し、以下を実施します。<em>削除が不安ならフォルダーごと退避</em>でも構いません。</p>
<pre><code>%LOCALAPPDATA%\Microsoft\VisualStudio\17.0_*\ComponentModelCache
%LOCALAPPDATA%\Microsoft\VSCommon\MEFCache
// プロファイル全体を初期化したい場合(バックアップ推奨)
%LOCALAPPDATA%\Microsoft\VisualStudio\17.0_*
</code></pre>
<p>合わせて NuGet キャッシュもクリアします。</p>
<pre><code>dotnet nuget locals all --clear
</code></pre>
<p>VS 再起動後、まず空の MVC プロジェクトで <em>新しい Scaffolded Item…</em> が開くかを確認しましょう。ここで開けば、プロジェクト内のパッケージ整合性の問題に焦点を絞れます。</p>
<h2>プロジェクト種別/構成のチェックポイント</h2>
<ul>
<li><strong>MVC テンプレートか</strong>:<em>ASP.NET Core Web App (Model-View-Controller)</em> を選んでいるか。Minimal API/空テンプレートでは必要要素不足で失敗することがあります。</li>
<li><strong>SDK/グローバル環境の固定</strong>:チーム/学習用にバージョンを固定するなら <code>global.json</code> を置きます。
<pre><code>{
"sdk": { "version": "9.0.100" }
}
NuGet ソース:ツール → NuGet パッケージ マネージャー → パッケージ ソース で nuget.org が有効か。社内プロキシ環境では資格情報や証明書の影響を受けます。
CLI による代替(GUI が壊れていても作業を進める)
ウィザードに依存しない開発をすぐ再開できます。初回のみジェネレーターを導入します。
dotnet tool install -g dotnet-aspnet-codegenerator
典型的な MVC + EF Core コントローラー/ビューの生成例:
dotnet aspnet-codegenerator controller \
-name MovieController \
-m Movie \
-dc MovieDbContext \
--useDefaultLayout \
--referenceScriptLibraries
Razor Pages で作るなら:
dotnet aspnet-codegenerator razorpage \
-m Movie \
-dc MovieDbContext \
-udl \
-outDir Pages/Movies
dotnet-ef を併用すると DB 周りの検証が容易です。
dotnet tool install -g dotnet-ef
dotnet ef migrations add Init
dotnet ef database update
“それでもダイアログが出ない”ときの深掘り
| 兆候 | 追加対処 | 理由/背景 |
|---|---|---|
安全モード devenv /safemode では開く | サードパーティ拡張を一時無効化 → 1 つずつ有効化 | 拡張が MEF 構成を壊している |
| プロジェクトを“フォルダーを開く”で扱っている | .sln/.csproj を明示的に開く | Open Folder モードでは VS の一部機能が限定される |
| テンプレートの選択画面が真っ白/一瞬で消える | ComponentModelCache 初期化、GPU ハードウェア アクセラレーション無効化も試す | キャッシュ破損/描画周りの相性 |
| “Package restore failed” が必ず出る | パッケージ ソース/プロキシ/証明書を再確認。nuget.config のクリーン化 | 復元不可のためウィザード内部の依存解決が失敗 |
| EF Core Provider が無い | SqlServer/Sqlite/他 Provider を追加 | Scaffolding のテンプレートに Provider が必要 |
トラブル事例と復旧シナリオ(再現→解決の実録フロー)
事例 A:初回プロファイルが引き金でウィザードが出ない
症状:VS 初回起動で C# 開発 を選択。以後、MVC プロジェクトで 新しい Scaffolded Item… を開くたびにエラー。対処:完全アンインストール → 再インストール後に General を選択 → ワークロード追加 → 改善。ComponentModelCache の破損または初期構成競合が原因と推定。
事例 B:TFM と NuGet のメジャーがズレて動かない
症状:net9.0 で作ったのに Microsoft.VisualStudio.Web.CodeGeneration.Design 6.x が残存。出力に Could not load file or assembly …。対処:関連パッケージを 9.x へ統一、dotnet nuget locals all --clear → 改善。
事例 C:オフライン/社内プロキシで依存が落ちない
症状:復元に時間がかかり最終的に失敗。対処:nuget.org を有効化、社内キャッシュのみならジェネレーターの必要パッケージを事前ダウンロードしてローカル ソース化。改善。
“やってはいけない”落とし穴
- TFM とパッケージのメジャー不一致:ウィザードが開けても生成後にビルドが通らなくなります。
- プロジェクトを開いたままキャッシュ削除:VS 側が再生成に失敗することがあるため、必ず VS を閉じてから。
- 複数の Provider を無秩序に併用:SqlServer と Sqlite を同時参照すると設計時に競合が起こることがあります。
検証のための最小手順(再現性のある“合格ライン”)
- 新規プロジェクト → ASP.NET Core Web App (Model-View-Controller)
- フレームワーク net9.0(またはチーム基準)を選択
- プロジェクト作成後に以下を追加/更新
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design --version 9.* dotnet add package Microsoft.EntityFrameworkCore.Design --version 9.* dotnet add package Microsoft.EntityFrameworkCore.Tools --version 9.* dotnet add package Microsoft.EntityFrameworkCore.SqlServer --version 9.* // or Sqlite - 新しい Scaffolded Item… → MVC Controller with views, using Entity Framework が表示されることを確認
- モデル
Movie、MovieDbContextを指定して生成 → ビルド・実行で CRUD が動作
トラブル対応コマンド集(手元保存推奨)
| 目的 | コマンド/操作 | メモ |
|---|---|---|
| アクティビティ ログ | devenv /log | 終了後 ActivityLog.xml を確認 |
| 安全モード起動 | devenv /safemode | 拡張/MEF 影響の切り分け |
| 設定リセット | devenv /resetsettings | 前提として設定バックアップ推奨 |
| NuGet キャッシュ削除 | dotnet nuget locals all --clear | 復元のやり直し |
| EF Tools | dotnet tool install -g dotnet-ef | マイグレーション/DB 更新 |
| Scaffolder(CLI) | dotnet tool install -g dotnet-aspnet-codegenerator | GUI 不要で生成可能 |
学習を止めないための“戦略”
- GUI 依存を下げる:Scaffolding は便利ですが、CLI とテンプレート コードの読み書きに慣れると 詰み が起きません。
- SDK/パッケージの固定:
global.jsonとDirectory.Packages.props(中央集権管理)でバージョンを固定し、学習/チームの再現性を担保。 - 最小再現リポジトリ:問題が出たら新規 MVC プロジェクトで 10 分以内に再現できる形に落とし、差異を比べます。
よくある質問(FAQ)
VS を再インストールしても直りません。次は? ワークロードの再適用、パッケージのメジャー整合、キャッシュ初期化、devenv /safemode の順に切り分けます。拡張が原因のことも多いです。 Minimal API から MVC へ後から切り替えられますか? 可能ですが、必要なサービス追加(AddControllersWithViews() など)や既定の Program.cs 調整、Razor ビュー/レイアウトの導入が必要です。新規に MVC テンプレートを作り比較移植が堅実です。 EF Provider はどれを選べば? 学習用/軽量なら Sqlite、SQL Server 学習/実務寄りなら SqlServer。どちらも 9.x 系で統一します。 会社のプロキシで復元が遅い/失敗します。 nuget.org を有効化し、必要ならローカル/社内キャッシュのソース URL を見直してください。証明書ストアや資格情報プロバイダーが影響することがあります。
復旧の判定基準(ゴール設定)
- 新しい Scaffolded Item… が即時に表示される
- MVC Controller with views, using Entity Framework が選べる
- 選択→生成→ビルド→起動までノーエラー
- CLI(
dotnet-aspnet-codegenerator)でも同じ成果物が生成できる
まとめ
Scaffolding ウィザードが開かない原因は、「ワークロード不足/破損」「パッケージ不整合」「初回プロファイル/拡張の噛み合わせ」「IDE キャッシュ破損」に大別できます。記事のチェックリスト順に進めれば、ワークロード再適用 → NuGet 9.x へ統一 → ログ観測 → キャッシュ初期化 →(必要なら)再インストールのどこかでほぼ確実に復旧できます。GUI に頼らず CLI を併用して学習を継続しつつ、環境の再現性を高めれば、同種のトラブルにも強くなれます。
付録:再発防止チェックリスト(印刷用)
- Visual Studio:ASP.NET & Web 開発、.NET デスクトップ開発 ワークロードを常にインストール
- プロジェクト:TFM と CodeGeneration.Design/EF Core のメジャーを一致(例:
net9.0↔ 9.x) - NuGet ソース:nuget.org を有効、プロキシ/証明書の確認
- トラブル時:出力ウィンドウ/ActivityLog で失敗点を特定
- キャッシュ:ComponentModelCache と NuGet キャッシュは定番の復旧ポイント
- CLI 併用:
dotnet-aspnet-codegeneratorとdotnet-efを常備 - 環境固定:
global.json、Directory.Packages.propsでバージョンを固定
補足:エラー別の即効アクション早見表
| エラーメッセージ/挙動 | 即効アクション | 背景 |
|---|---|---|
Could not load file or assembly '...Web.CodeGeneration...' | CodeGeneration.Design を TFM に合わせて更新、NuGet キャッシュ削除 | メジャー不一致/破損 |
| ウィザードが一瞬で閉じる/空白 | ComponentModelCache 削除、GPU アクセラレーション無効化、拡張停止 | MEF/描画のキャッシュ破損 |
Package restore failed | ネットワーク/ソース確認、dotnet restore -v n で詳細確認 | 依存解決不可 |
| テンプレートが最小しか表示されない | MVC テンプレートで作り直し、ワークロード再適用 | プロジェクト種別のミスマッチ |

コメント