1.

【Visual Studio】 C#のForm自動生成時に「値が有効な範囲にありません」エラー

▶
編集
この記事の要点
  • Visual Studio で Windows フォームを自動生成した直後に「値が有効な範囲にありません」と表示されるエラー
  • 英語版の「Value does not fall within the expected range.」に当たり、Visual Studio 内部で不正な引数が渡されたことを示す汎用的なメッセージ。自分のコードの誤りとは限らない
  • まず Visual Studio を再起動する。筆者の環境(VS Community 2019 16.11.3)ではこれで解消した
  • 再発する場合: デザイナーのタブを閉じてリビルド → VS を閉じて .vs / bin / obj を削除 → ComponentModelCache を削除、の順に試す
  • それでも直らなければ、拡張機能を無効にしたセーフモードでの起動、VS の更新・修復を行う

エラー内容

Visual Studio で Windows フォーム(Form)を自動生成したとき、「値が有効な範囲にありません」エラーが発生します。プロジェクトを新規作成した直後や、「追加 → フォーム (Windows フォーム)」でフォームを追加した直後、まだ自分では何もコードを書いていない状態で発生します。

値が有効な範囲にありません。
(英語版: Value does not fall within the expected range.)

原因

このメッセージは .NET の ArgumentException の既定のメッセージ(内部的なエラーコード E_INVALIDARG / 0x80070057 に対応)で、「関数に渡された値が想定外だった」ことしか表していません。自動生成直後に出る場合は、生成されたコードではなく Visual Studio 自身(デザイナー、テンプレート処理、拡張機能、内部キャッシュ)の一時的な不整合が原因であることがほとんどです。

考えられる要因は次のとおりです。いずれも「どれが原因か」をエラー文だけから特定するのは難しいため、下の対処を手軽なものから順に試します。

  • Visual Studio のプロセス内に残った古い状態(長時間起動したまま、ソリューションの切り替えを繰り返した等)
  • ソリューション単位の作業ファイル(.vs フォルダ内の .suo など)の破損
  • Visual Studio のコンポーネントキャッシュ(ComponentModelCache)の不整合。更新や拡張機能のインストール直後に起きやすい
  • 拡張機能の不具合

対処法

1. Visual Studio を再起動する

Visual Studio を再起動すれば解消されることを確認しています。すべての Visual Studio ウィンドウを閉じ、タスクマネージャーで devenv.exe が残っていないことを確認してから起動し直します。

2. デザイナーを閉じてリビルドする

  1. 開いている「Form1.cs [デザイン]」のタブをすべて閉じる
  2. メニューの「ビルド → ソリューションのクリーン」→「ソリューションのリビルド」
  3. ソリューション エクスプローラーで Form1.cs をダブルクリックしてデザイナーを開き直す

3. 作業ファイルを削除する(Visual Studio を閉じた状態で)

ソリューションのフォルダにある次のフォルダを削除します。いずれも再ビルドや再起動で自動的に作り直されるもので、ソースコードは含まれません。

  • .vs(隠しフォルダ。ウィンドウ配置などのユーザー設定 .suo が入っている。削除すると開いていたタブなどの状態はリセットされる)
  • 各プロジェクトの bin と obj

4. ComponentModelCache を削除する

Visual Studio を閉じてから、次のフォルダ内の ComponentModelCache フォルダを削除します。次回起動時に再作成されます。

%LOCALAPPDATA%\Microsoft\VisualStudio\<バージョン番号_インスタンスID>\ComponentModelCache
例: VS 2019 なら 16.0_xxxxxxxx、VS 2022 なら 17.0_xxxxxxxx

5. 拡張機能を疑う・Visual Studio を修復する

  • コマンドプロンプトで devenv /SafeMode を実行すると、拡張機能を読み込まずに起動できる。この状態でエラーが出なければ、最近入れた拡張機能を無効にして確かめる
  • 「Visual Studio Installer」から更新を適用する。既知の不具合が修正されていることがある
  • それでも直らない場合は、Visual Studio Installer の「その他 → 修復」を実行する

確認したいポイント

確認項目見るところ
プロジェクトの種類「Windows フォーム アプリ (.NET Framework)」と「Windows フォーム アプリ」(.NET) は別テンプレート。.NET 版のデザイナーは別プロセスで動くなど仕組みが異なるため、どちらで起きているかを把握しておく
保存場所のパスパスが非常に長い、OneDrive 同期フォルダの中にある、といった場合にファイル生成が不安定になることがある。C:\work のような短いパスで新規作成して再現するか試す
生成されたファイルForm1.cs / Form1.Designer.cs / Form1.resx がそろっているか。Designer.cs が空や途中で切れていればテンプレート処理の失敗
出力ウィンドウ「表示 → 出力」で、エラー発生時に詳しいメッセージが出ていないか
Visual Studio のバージョン「ヘルプ → Microsoft Visual Studio のバージョン情報」。更新で直る不具合もあるため、問い合わせや検索の際に必要

解消できたかの確認方法

  1. Visual Studio 起動後、新しい Windows フォーム プロジェクトを作成してエラーが出ないか確認する
  2. デザイナーでフォームにボタンを 1 つ置き、ビルド(Ctrl+Shift+B)と実行(F5)ができることを確かめる
  3. 既存のプロジェクトでも、フォームの追加・デザイナーの表示ができるか確認する

バージョン情報

本記事の現象と「再起動で解消」を確認した環境:

Microsoft Visual Studio Community 2019
Version 16.11.3

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 【Visual Studio】Form自動生成時に「値が有効な範囲にありません」エラー
  2. トップレベルのコントロールをコントロールに追加できません。
  3. 指定された名前のソリューションファイルが既に存在するため、ソリューション名を変更できません