VisualStudioを使っていると「移動したか、名前が変更されたか、またはコンピュータに存在しません。」と出る

タイトルの通りです。

具体的な症状は以下のような感じでした。

  • エクスプローラーからそのファイルをドラッグアンドドロップでVisualStudioに持ってくると、「(そのファイルのフルパス)は移動したか、名前が変更されたか、またはコンピュータに存在しません。」と出る。開こうとしているのだからまさにそこにあるはずなのですが。
  • #includeしているファイルのところで左クリックして出てくるメニューからそのファイルを開こうとすると、見つからなかったとエラーが出る。
  • そのファイルで定義されている関数を呼び出している部分を左クリックして出てくるメニューから定義に移動しようとすると、実行するのに十分なメモリがありませんでしたとエラーになる。
  • インテリセンスが働かない。また、予約語が青くなる以外に色がつかない。
  • そのファイルを変更したあとビルドしようとしても、「変更なし」とみなされてビルドができない。
  • VisualStudioを閉じたり、再起動したりしてもやはり同じ症状が出る。
  • 新たにディレクトリを作り、ソースコードgit cloneでコピーした後、CMakeをして作ったまっさらな状態から再度コンパイルしようとすると、No such file or directoryと出てコンパイルできない。

対処方法をググってみると、大半は、単に初心者がインクルードパスを適切に指定できていないというだけの話であって、今回の症状とは関係がなさそうに思われます。 なぜならそのフォルダにある他のファイルはちゃんとコンパイルできるし、そもそも以前はコンパイルできていたからです。

いくつか根深い問題を踏んで、解決したというウェブサイトを見つけました。

qiita.com

このウェブサイトによれば、WSL上でgitを使っていたとか、大文字小文字の区別だとか、そういった話が問題を引き起こすとのことです。 確かにgit mvでファイル名を変更した後に問題が発生したので、心当たりがあるということになります。 しかし、表示されるパスが全て大文字になっているということはないので、症状は異なります。

sgry.jp

このウェブサイトによれば、%TEMP%ディレクトリに一時ファイルが残ってしまうため、VisualStudioを再インストールするなどの方法をとってすら解決ができないとのことです。 しかし、%TEMP%ディレクトリにmsvcという文字列を含むファイルは見つからなかったため、どうも違うようです。

blogs.yahoo.co.jp

複数のソリューションを持つプロジェクトを扱っている場合にたまに出くわすと書いてあり、その条件に該当します。 .suoファイルを削除すれば問題を解決できると書いてあります(.suoファイルというのは、.suoという拡張子のファイルではなくて、.suoの四文字が名前であるファイルのことです)。 しかし削除しても症状が改善することはありませんでした。

解決方法(?)

とりあえず元の名前に変更したところ、いくつかの問題は解決しました。

  • エクスプローラーからドラッグアンドドロップでそのファイルを開くことができるようになった。
  • そのファイルを変更した後ビルドしようとすると、ちゃんと依存しているファイルが全てコンパイルされる。
  • 定義に移動しようとすると、実行するのに十分なメモリがありませんでしたとエラーが出る症状はそのまま。しかし、一日経ったら(※)改善した。
  • #includeしているファイルに飛ぼうとすると見つからなかったとエラーが出る症状はそのままだったが、やはり一日経ったら(※)改善した。
  • インテリセンスは依然働かないし、予約語が青くなる以外に色がつかないままである。

※PCは起動しっぱなしだったけれど、VisualStudioを閉じて開きなおしたのが原因かもしれないです。

典型的な「よくわからないけれどいろいろやったらなおった」という感じになって原因も対処方法もわからずじまいになってしまいました……。