6.

.suo ファイルとは何か(Visual Studio のユーザー固有設定、.gitignore 必須の理由)

編集
この記事の要点
  • .suo (Solution User Options) = Visual Studio のソリューション単位のユーザー固有設定
  • 中身: 最後に開いたファイル / ブレークポイント / デバッグウォッチ / ウィンドウレイアウト / 折りたたみ状態
  • 隠しファイルとして .sln と同じ場所に保存(VS 2017+ は .vs/SolutionName/v17/.suo
  • 絶対に .gitignore: ユーザー個別設定なのでチーム共有不要。同期するとレイアウトが上書きされ事故る
  • バイナリ形式なので diff できない。破損しても削除すれば次回起動で再生成される(安全)
  • .vs/ フォルダは VS 2015+ の進化形。同様に .gitignore 対象

.suo ファイルの正体

.suoSolution 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)あり。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ショートカットキー
  2. dllを参照する方法
  3. エラー一覧
  4. 本番環境のdll内で参照しているdllファイルの置き場所
  5. フォームのタブ切り替え順序を変更する方法
  6. .suoファイルとは