Visual Studio 2022 で既存のソースコード一式を取り込みたいのに、昔あった「Include in Project」が見つからず困っていませんか?本記事では、既存フォルダー/ディレクトリツリーを Visual Studio 2022 プロジェクトへ安全かつ効率的に取り込む具体的な手順と、トラブル時の対処法をまとめます。
Visual Studio 2022で既存フォルダーを取り込めない問題の整理
Visual Studio 2017 や 2019 を使っていた人が 2022 に移行すると、まず戸惑うのが次の点です。
- かつて右クリックメニューにあった 「Include in Project」 が見当たらない
- ソリューション エクスプローラーの 「すべてのファイルを表示」 を押しても、プロジェクト配下に置いたはずのフォルダーが表示されないことがある
- ドラッグ&ドロップでフォルダーを落としても、何も起きない/一部しか取り込まれない
さらに 2025 年時点の Visual Studio Enterprise 2022 (17.14.9 など) では UI の微妙な変更もあり、古い解説記事のスクリーンショットどおりに操作しても同じメニューにたどり着けないことがあります。
しかし結論から言えば、Visual Studio 2022 でも 既存のフォルダー階層を丸ごとプロジェクトへ取り込むことは可能 です。名前や配置が少し変わっているだけで、機能自体は引き続き用意されています。
ここからは、次の順番で解説していきます。
- 「すべてのファイルを表示」を使った基本的な取り込み手順
- フォルダーが表示されない場合の原因と対処
- プロジェクト外フォルダーをリンクとして取り込む方法
- .vcxproj / .csproj を直接編集する上級テクニック
- ドラッグ&ドロップが効かないときのチェックポイント
- コピー/リンク/ソリューション フォルダーのメリット・デメリット比較
- 大規模な既存コードツリーをインポートする際の実践ノウハウ
「すべてのファイルを表示」を使った基本の取り込み手順
まずは、Visual Studio 2022 で プロジェクト フォルダーの下に実在しているフォルダー/ファイル を取り込む標準的な方法から説明します。
前提となるフォルダー配置
以下のようなフォルダー構造を例にします。
MySolution
├─ MyProject <= .vcxproj / .csproj があるプロジェクトルート
│ ├─ src
│ │ ├─ legacy
│ │ │ ├─ a.cpp
│ │ │ └─ b.cpp
│ │ └─ new
│ └─ MyProject.vcxproj
└─ MySolution.sln
ここで src\legacy フォルダーは実際のディスク上には存在するものの、プロジェクトにはまだ登録されていない前提です。
ステップ1:ソリューション エクスプローラーで「すべてのファイルを表示」をオン
- Visual Studio 2022 でソリューションを開きます。
- メニューから [表示] → [ソリューション エクスプローラー] を選び、ソリューション エクスプローラーを表示します。
- ソリューション エクスプローラーの最上部に並ぶアイコンの中から、フォルダーに「+」がついたようなアイコンである [すべてのファイルを表示] をクリックします。
このアイコンがオンになると、プロジェクト フォルダー直下に存在するファイル・フォルダーが 「薄いアイコン」 で表示されるはずです。まだプロジェクトに含まれていない項目は、半透明っぽいアイコンで見分けられます。
ステップ2:表示されたフォルダーを「プロジェクトに含める」
- ソリューション エクスプローラーで、見えるようになった
srcフォルダー →legacyフォルダーを辿ります。 legacyフォルダー、またはその配下のファイルを選択して右クリックします。- コンテキストメニューから [プロジェクトに含める] を選択します。
これにより、C++ プロジェクトであれば .vcxproj に、C# プロジェクトであれば .csproj に、次のようなエントリが自動的に追記されます。
- C++ ソースの場合:
<ClCompile Include="src\legacy\a.cpp" /> - C++ ヘッダの場合:
<ClInclude Include="src\legacy\a.h" /> - その他のファイル:
<None Include="src\legacy\readme.md" />など
この状態になると、該当ファイルはビルド対象・参照対象として Visual Studio に認識され、IntelliSense やリファクタリングの機能も有効になります。
ステップ3:不要になったときは「プロジェクトから除外」
後から「やっぱりこのフォルダーはビルド対象から外したい」といった場合は、再度ファイル/フォルダーを右クリックし、今度は [プロジェクトから除外] を選択します。すると、該当ファイルに対応する XML エントリが .vcxproj / .csproj から削除されます。
ここで重要なのは、「プロジェクトから除外」しても物理ファイルは削除されない という点です。フォルダーから削除されるのはあくまで「プロジェクトへの登録情報」であり、ディスク上のファイルはそのまま残ります。誤操作しても慌てず、必要であれば再度「プロジェクトに含める」を行えば復旧可能です。
「すべてのファイルを表示」でフォルダーが出てこない場合の原因と対処
ここからが本題です。2022 以降、とくに Enterprise 版 17.x を使っていると、以下のようなケースに遭遇することがあります。
- 確かにプロジェクトと同じ階層にフォルダーを置いたのに、「すべてのファイルを表示」を押しても何も見えない
- サブフォルダーは見えるのに、さらにその下の階層が表示されない
- ドラッグ&ドロップしても単体ファイルしか追加されない/何も起きない
よくある原因と対処を順番に見ていきます。
原因1:フォルダーがプロジェクト フォルダーの「外」にある
まず確認したいのが、実際のフォルダー配置です。次のように、ソリューションとプロジェクトのフォルダー階層が分かれている場合があります。
MySolution
├─ MyProject <= .vcxproj がある
├─ ExternalLib <= 別フォルダーに既存コードを置いてしまった
└─ MySolution.sln
この場合、ExternalLib は プロジェクト フォルダーではなくソリューション フォルダーの直下 にあるため、「すべてのファイルを表示」を押しても MyProject の下には現れません。
対処方法としては次のいずれかになります。
- 推奨:フォルダーをプロジェクトルートへ移動またはコピーする
- フォルダーを移動したくない場合は、リンクとしてプロジェクトに登録する
- どうしても元の場所を変えずに階層ごと認識させたい場合は、.vcxproj / .csproj を手動編集する
それぞれの具体的な手順は次のセクションで詳しく説明します。
原因2:フォルダー属性や権限によって表示が抑制されている
Windows 側でフォルダーに 隠し属性 が付いていたり、アクセス権限が不足している場合、Visual Studio がフォルダーを正しく列挙できないことがあります。
チェックポイントとしては次のとおりです。
- エクスプローラーでフォルダーを右クリック → [プロパティ] → [全般] タブで [隠しファイル] にチェックが入っていないか確認する
- 読み取り専用属性が原因になるケースは稀ですが、問題切り分けとして一時的に解除してみる
- 組織環境でリモートフォルダーやネットワークドライブ上のコードを扱う場合、権限不足で読み取りが失敗 していることもある
権限が怪しい場合は、Visual Studio を 「管理者として実行」 して再度確認してみる価値があります。スタートメニューの Visual Studio アイコンを右クリック → [その他] → [管理者として実行] を試してみてください。毎回管理者で起動するのは推奨されませんが、現象切り分けには有効です。
原因3:CMake プロジェクトや「フォルダー ビュー」を開いている
Visual Studio 2022 には、従来の「ソリューション/プロジェクト」とは別に、フォルダーをそのまま開くモード や CMake プロジェクトのモードがあります。この場合、そもそも .vcxproj / .csproj が存在せず、「プロジェクトに含める」という概念がない ため、メニュー構成が異なります。
次のような特徴がある場合は、このモードで開いている可能性が高いです。
- ソリューション エクスプローラーの最上位に「ソリューション」アイコンがなく、いきなりフォルダーから始まっている
- 右クリックメニューに「プロジェクトに含める」が存在しない
この場合は、通常の C++ / C# プロジェクトとして作り直し、既存フォルダーをあらためて取り込む方針を検討した方がよいでしょう。
プロジェクト外フォルダーを「リンクとして追加」する手順
既存のコードベースを複数のソリューションから共通利用している場合など、物理フォルダーをプロジェクトフォルダー内にコピーしたくない ケースはよくあります。そのような場合は、Visual Studio の 「リンクとして追加」 機能が有効です。
前提構成の例
SharedLib
├─ include
└─ src
MySolution
├─ MyProject
│ └─ MyProject.vcxproj
└─ MySolution.sln
ここで SharedLib を別の場所に置いたまま MyProject から参照したい、という状況を想定します。
リンクとして追加する操作手順(C++ / C# 共通)
- ソリューション エクスプローラーで、対象プロジェクト(
MyProject)を右クリックします。 - [追加] → [既存の項目] を選択します。
- 表示されたファイル選択ダイアログで、
SharedLib\srcなど取り込みたいフォルダーに移動し、追加したいファイルをまとめて選択します。 - 画面右下の [追加] ボタンの ▼ をクリックし、[リンクとして追加] を選びます。
通常の [追加] を押してしまうと、ファイルがプロジェクトフォルダー側にコピーされますが、[リンクとして追加] を選ぶことで、元ファイルを移動せずにプロジェクトから参照 できるようになります。
この方法のポイントは以下のとおりです。
- ディスク上には 1 つの物理ファイルのみ。複数のプロジェクトから同じコードを共有できる
- .vcxproj / .csproj 上には相対パスまたは絶対パスで登録される
- リンク先のフォルダー構成は そのままでは再現されず、プロジェクト内の任意のフォルダーに論理的に配置される
「フォルダーごとリンクしたい」場合は、フォルダー内のファイルをすべて選択してリンクとして追加するか、後述の ソリューション フォルダー と組み合わせて論理構造を再現する方法が現実的です。
.vcxproj / .csproj を直接編集してフォルダーを取り込む(上級者向け)
より柔軟にフォルダー階層を取り込みたい場合、あるいは大量のファイルを一括登録したい場合は、プロジェクトファイルを直接編集する方法もあります。C++ プロジェクトなら .vcxproj、C# プロジェクトなら .csproj をテキストエディタで開き、MSBuild のワイルドカード を使ってフォルダーを登録するやり方です。
ワイルドカードで一括インクルードする例(C++)
以下は、src\legacy 以下のすべての .cpp ファイルをビルド対象として登録する例です。
<ItemGroup>
<ClCompile Include="src\legacy\**\*.cpp" />
</ItemGroup>
**\*.cpp と書くことで、legacy 以下のサブフォルダーを含む全ての .cpp を一括指定できます。これにより、将来 legacy の下にファイルを追加しても、プロジェクトファイルを編集しなくても自動的にビルド対象に含まれるようになります。
フィルター(.vcxproj.filters)との関係
C++ プロジェクトの場合、ソリューション エクスプローラーに表示される フォルダー風の構造 は、実際には .vcxproj.filters という別ファイルに保存されています。こちらにエントリがないと、.vcxproj に登録されていても「フィルター」のツリーに表示されない場合があります。
大量の既存コードを取り込むときには、まず .vcxproj でワイルドカードによる登録を行い、その後必要に応じて Visual Studio 上からフォルダーをドラッグしてフィルター構造を整理する、という流れにすると運用しやすくなります。
ドラッグ&ドロップできない/Enterprise 17.14.9 の挙動と対処
Visual Studio 2022 Enterprise 17.14.9 付近のバージョンでは、環境によって次のような挙動が報告されます。
- エクスプローラーからフォルダーをソリューション エクスプローラーへドラッグしても、カーソルが禁止アイコンのままでドロップできない
- フォルダーをドロップしても、中の一部ファイルしか追加されない
このような場合は、次のチェックリストを順番に確認してみてください。
チェック1:ソリューション フォルダーと物理フォルダーを混同していないか
ソリューション エクスプローラーで「新しいソリューション フォルダー」を作成すると、実際のディスク上にはフォルダーが作られない 論理的なフォルダー ができます。このソリューション フォルダーにファイルやプロジェクトをドラッグすると、あくまで「表示上のグルーピング」が変わるだけで、物理フォルダー構造には影響しません。
既存フォルダーを取り込みたい場合は、ソリューション フォルダーではなく、プロジェクトのノードを狙ってドロップ する必要があります。
チェック2:管理者権限やセキュリティソフトの影響
管理者権限の違いから、エクスプローラー(通常権限で起動)と Visual Studio(管理者で起動)の間でドラッグ&ドロップがブロックされることがあります。この場合は、両方を同じ権限で起動することで解消するケースがあります。
また、一部のセキュリティソフトやレジストリ制限により、アプリ間ドラッグ&ドロップが制限されている場合もあります。この場合は組織のポリシーに依存するため、無理に回避せず、「すべてのファイルを表示」+右クリックで追加 や「リンクとして追加」の手順に切り替えたほうが安全です。
チェック3:対象フォルダーがネットワークドライブ/同期フォルダーでないか
OneDrive や共有ネットワークドライブ、社内の同期ドライブ上のフォルダーを取り込む場合、リアルタイム同期中のロックなどが原因で Visual Studio がファイル列挙に失敗することがあります。可能であれば、以下のような運用を検討してください。
- ローカルディスク上のワークフォルダーに一度コピーしてからプロジェクトに取り込む
- ビルド対象をローカルに置き、同期は別プロセス(Git など)に任せる
取り込み方法別「メリット・デメリット」比較
既存フォルダー/ディレクトリツリーをプロジェクトに組み込む方法は、大きく次の三つに分けられます。
- 物理フォルダーをプロジェクトフォルダー内にコピー・移動する
- ファイルを リンクとして追加 する
- ソリューション フォルダー で論理構造だけ再現する
それぞれの特徴を表にまとめると、次のようになります。
| 項目 | メリット | デメリット/注意点 |
|---|---|---|
| 物理フォルダーをコピー | ・プロジェクト内の構造がそのまま認識される ・外部フォルダーへの依存が減り、移植性が高い ・他環境へ ZIP で渡しても完結しやすい | ・プロジェクトサイズが肥大化する ・元の場所と二重管理になるリスク ・どちらが最新か混乱しやすい |
| リンクとして追加 | ・元の場所を変更せず取り込める ・複数のソリューションから共通コードを参照しやすい ・既存のビルドスクリプトやツールチェーンを温存しやすい | ・リンク先パスが変わるとビルドエラーになる ・プロジェクトのバックアップだけでは完結せず、元フォルダーも必須 ・チームメンバー全員が同じパス構成を再現する必要がある |
| ソリューション フォルダー | ・ディスク上のフォルダーを意識せず論理構造だけ整理できる ・既存プロジェクトを分類しやすい ・設定変更がファイルシステムに影響しない | ・実際のディスク構造とは異なるため、慣れないと混乱する ・ビルド対象の追加・削除そのものは行えない ・既存の物理フォルダーを「そのまま取り込む」用途には向かない |
どの方法を選ぶべきかは、プロジェクトの性質によって変わります。例えば次のようなイメージです。
| シナリオ | おすすめ方法 | 理由 |
|---|---|---|
| 一度きりの移植、今後は VS プロジェクトが主 | 物理フォルダーをコピー+「プロジェクトに含める」 | VS プロジェクトだけで完結させたい。外部依存を断ちたい。 |
| 既存ビルド環境(make, CMake 等)を維持しつつ VS を補助的に使う | リンクとして追加 | 物理構成はそのまま維持し、エディタやデバッガとして VS を活用する。 |
| 巨大なソリューションでプロジェクト整理だけしたい | ソリューション フォルダー | 物理フォルダーを触らず論理構造だけグルーピングしたい。 |
Visual Studio 2022のUI変更点と「Include in Project」の現在地
古い記事などを見ると、右クリックメニューに「Include in Project」という英語表記が出ているものが多くあります。Visual Studio 2022(日本語環境)では、これが単に 「プロジェクトに含める」 という日本語ラベルに変わっただけで、機能的にはほぼ同じと考えて問題ありません。
また、ツールバーやコンテキストメニューの構成がバージョンによって微妙に変わっています。
- 「すべてのファイルを表示」アイコンが、古い記事のスクリーンショットと違う位置にある
- [プロジェクトに含める] がフォルダーとファイルで微妙に別の位置に出る
- ソリューション エクスプローラーのフィルター/検索機能が強化され、表示状態が分かりづらくなる
もしアイコンやメニューが見当たらない場合は、次の順で確認すると迷いが減ります。
- [表示] → [ソリューション エクスプローラー] を開き直す
- ソリューション エクスプローラー上部のアイコン群に [すべてのファイルを表示] があるか確認する
- 対象のファイル/フォルダーを右クリックし、[プロジェクトに含める] が表示されるか確認する
それでも見つからない場合は、本当に .vcxproj / .csproj を開いているのか、フォルダー ビューや CMake プロジェクトを開いていないかを疑ってみてください。
大規模な既存コードツリーをインポートするときの実践テクニック
数千ファイル規模の既存コードを Visual Studio 2022 に取り込む際、すべてを GUI 上で一つずつ「プロジェクトに含める」していては時間が足りません。ここでは比較的大規模なコードツリーを扱うときの実践的な流れの例を紹介します。
ステップ1:物理フォルダー構成を整理する
- まずはエクスプローラー上で、ビルド対象にしたいフォルダー と ドキュメントやツールなど補助的なフォルダー を分けておく
- テストコード、サンプルコードなどは、将来的に別プロジェクトに切り出せるようにディレクトリ名をはっきりさせておく
ステップ2:プロジェクトフォルダー内へコピーまたはリンク構成を決める
- 「このソリューション単体で完結させたい」のであれば、プロジェクトフォルダー内にコピー してしまう
- 既存のビルド環境が別にあり、複数プロジェクトで共有しているコードなら、リンクとして追加 を基本とする
ステップ3:.vcxproj / .csproj にワイルドカードで一括登録
一度に大量のファイルを登録する場合、プロジェクトファイルにワイルドカードを使うことで作業時間を大きく短縮できます。例:
<ItemGroup>
<ClCompile Include="src\core\**\*.cpp" />
<ClCompile Include="src\legacy\**\*.cpp" />
<ClInclude Include="include\**\*.h" />
</ItemGroup>
これにより、将来的に新規ファイルを追加しても、基本的にはプロジェクトファイルの編集が不要になります。
ステップ4:ソリューション フォルダーで論理構造を整える
ソリューション エクスプローラーがごちゃごちゃしてきたら、ソリューション フォルダー を使ってプロジェクトを論理的に整理します。
- 「アプリ本体」「共通ライブラリ」「ツール」「テスト」など、用途ごとにソリューション フォルダーを作る
- 既存プロジェクトをこれらのフォルダーにドラッグ&ドロップして分類する
あくまで論理構造の整理であり、物理フォルダー構成には影響しないため、既存コードに対する影響を最小限に抑えつつ見通しを良くできます。
よくある質問と補足
Q. C# プロジェクトでも手順は同じ?
基本的な考え方は同じです。C# プロジェクト(.csproj)でも、
- [すべてのファイルを表示] で物理フォルダーを表示
- 右クリック → [プロジェクトに含める]
という流れで取り込めます。ただし、C# の新しい SDK スタイル プロジェクトでは、「フォルダー配下の .cs を自動的にコンパイル対象とする」 仕様になっている場合もあり、従来よりもプロジェクトファイルの記述がシンプルです。その分、既定の挙動を理解しておくと混乱が減ります。
Q. 取り込み後にフォルダー名を変更しても大丈夫?
Visual Studio からフォルダー名を変更した場合は、プロジェクトファイル内のパスも自動で更新されます。一方、エクスプローラーで直接フォルダー名を変更した場合、プロジェクトファイルに残った古いパスとの不整合 により、ビルドエラーや「ファイルが見つかりません」エラーの原因になります。
可能な限り、フォルダー名の変更や移動は Visual Studio 上から行うか、編集後に [すべてのファイルを表示] で差分を確認しながら「プロジェクトに含める/除外」をやり直すようにしましょう。
Q. Git などのバージョン管理との相性は?
リンクとして追加したファイルを扱う場合、Visual Studio のプロジェクトファイルだけをコミットしても、不十分 である点に注意してください。実際のソースコードが別リポジトリにあるのか、サブモジュールなのか、といった構成をチーム全体で共有しておく必要があります。
逆に、プロジェクトフォルダー内へコピーしてしまう方式は、リポジトリとしては完結しやすいものの、「元の場所のコード」と乖離するリスクがあります。どちらを取るかは、チーム開発の運用方針と相談して選択するのが良いでしょう。
まとめ:Visual Studio 2022でも既存フォルダー取り込みは十分可能
Visual Studio 2022 では、「Include in Project」という英語表記こそ見かけなくなりましたが、機能としては [すべてのファイルを表示] + [プロジェクトに含める] の組み合わせで引き続き利用可能です。
- まず、プロジェクトフォルダー直下にフォルダーを置き、[すべてのファイルを表示] で見えるようにする
- 表示されたフォルダー/ファイルを右クリック → [プロジェクトに含める] で登録する
- プロジェクト外フォルダーは「リンクとして追加」か、.vcxproj / .csproj へのワイルドカード設定で対応する
- 表示されない場合は、フォルダーの位置・属性・権限・プロジェクト種別(CMake / フォルダービュー)を見直す
- 扱いにくいときはソリューション フォルダーで論理構造を整理し、見通しを良くする
ポイントさえ押さえておけば、Visual Studio 2022 でも既存のフォルダー/ディレクトリツリーを十分に活用できます。古いバージョンの操作感に引きずられすぎず、「どのフォルダーを、どのような形でプロジェクトに認識させたいのか」を意識しながら、自分のプロジェクトに合った取り込み方法を選んでみてください。

コメント