| この記事の要点 |
|
.suo ファイルの正体
.suo は Solution User Options の略で、Visual Studio がユーザー一人ひとり / マシン一台一台に固有の設定を保存するファイルです。MyApp.sln に対して MyApp.suo がペアで作られます(ただし VS 2017 以降は .vs/ フォルダ内に隠されている)。
| VS バージョン | .suo の場所 |
|---|---|
| VS 2010 / 2012 | ソリューションと同じフォルダの MyApp.suo(隠しファイル) |
| VS 2013 | 同上 |
| VS 2015+ | .vs\MyApp\v14\.suo |
| VS 2017 | .vs\MyApp\v15\.suo |
| VS 2019 | .vs\MyApp\v16\.suo |
| VS 2022 | .vs\MyApp\v17\.suo |
何が保存されるか
- 開いていたファイルのリスト(次回起動時に復元)
- ブレークポイントの位置・条件・有効/無効
- デバッグウォッチ式
- ウィンドウレイアウト(Solution Explorer / Output / Error List のサイズと位置)
- ソリューション内の展開/折りたたみ状態
- スタートアッププロジェクトの選択
- 最近のファイル
- ブックマーク
ポイントは「ソースコードに影響しない設定」だけが入っていることです。プロジェクトのコンパイル設定や参照、コードはすべて .csproj / .sln 側に書かれます。
.gitignore に必須な理由
.suo はチームで共有するべきではありません。共有すると次のような事故が起こります:
- あなたが開いていたファイルが、別の開発者が pull した瞬間に開かれる
- ブレークポイントが大量に増殖する
- ウィンドウレイアウトが他人の好みに変わる
- マシン依存パスが含まれてマージコンフリクト連発
- そもそもバイナリなので Git では差分を扱いにくい
標準の .gitignore(Visual Studio 用)
# Visual Studio ユーザー固有
*.suo
*.user
*.userosscache
*.sln.docstates
.vs/
# ビルド出力
[Bb]in/
[Oo]bj/
# NuGet
*.nupkg
packages/
**/[Pp]ackages/*
!**/[Pp]ackages/build/
# Rider / ReSharper
.idea/
_ReSharper*/
# 自動生成
TestResults/
[Dd]ebug/
[Rr]elease/
GitHub 公式の VisualStudio.gitignore が最も網羅的でお勧めです。
.suo が壊れたら削除して OK
.suo に依存する重要情報はありません(あくまでユーザーの使い勝手設定)。VS が起動時にクラッシュ・固まる・空のソリューションが開くなど不審な挙動があれば、.suo を削除して再起動すれば再生成されます。
# VS を完全終了
Get-Process devenv -ErrorAction SilentlyContinue | Stop-Process -Force
# プロジェクトのルートで
cd C:\src\MyApp
# 古い形式の .suo
Get-ChildItem -Force *.suo
Remove-Item *.suo -Force
# 新形式(VS 2015+)
Remove-Item .vs -Recurse -Force
# VS を起動 → 再生成される
.vs/ フォルダの中身
VS 2015 以降、.suo はもちろん、他のキャッシュも .vs/ 配下に集約されました:
.vs/
└── MyApp/
├── v17/
│ ├── .suo ← ユーザー設定
│ ├── DocumentLayout.json ← レイアウト
│ ├── DocumentLayout.backup.json
│ └── Browse.VC.db ← C++ IntelliSense
├── config/
│ └── applicationhost.config ← IIS Express 設定
└── FileContentIndex/
└── *.vsidx ← 検索インデックス
.suo の中を覗くことはできるか
バイナリ形式(CFB - Compound File Binary, Microsoft Office と同形式)なので、通常のテキストエディタでは読めません。中身を覗きたい場合は:
strings MyApp.suoで文字列だけ抽出(Unix の strings コマンド or Sysinternals)- OLE Compound Document Viewer 等の専用ツール
- でも普通は読む必要なし。困ったら削除でリセット
FAQ
Q: .suo を共有したいときは?
A: 基本的にはやめましょう。どうしても共通のウィンドウレイアウトを共有したい場合は、VS の「ツール」→「設定のインポートとエクスポート」を使います。
Q: .suo を間違って Git にコミットしてしまった
A: git rm --cached *.suo → .gitignore に追記 → コミット。履歴から消したい場合は git filter-repo。
Q: ブレークポイントが復元されない
A: .suo が削除された / 別マシンで開いた可能性。VS 2022 では「ブレークポイントをチームで共有」する別機能(Live Share)あり。
📚 関連: ファイル形式・拡張子セクション — 主要なファイル拡張子・形式を体系的に解説。ファイル拡張子とは(概論)
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15