はじめに
MicrosoftのVisual Studio 2017でC++のプログラムを作っていたのですが、ある日突然ユニットテストが実行できなくなり何時間かはまったので、その原因と解決法をまとめておきます。
現象
ソースを特に変更したわけでもないのに、ある日突然ユニットテストが失敗しました。
エラーの内容は、
A 64-bit test cannot run in a 32-bit process. Specify platform as X64 to force test run in X64 mode on X64 machine.
とのこと。
解決法
64 ビット プロセスとして単体テストを実行するにはにある手順で、テストの実行環境を64ビットにしたら解決しました。
具体的にはVisual Studioのメニューから、[テスト]-[設定]-[プロセッサ アーキテクチャ]で[X64]を指定します。
原因
.suoファイルを誤って消したことが原因でした。
suoはソリューションユーザーオプション(Solution User Options)の略で、ソリューションに関する色々な設定が書かれているのが.suoファイルです。バイナリファイルなので、中身は「ミマ爍ア」みたいな感じです。
置いてある場所は、ソリューションフォルダの下の「.vs\ソリューション名\v15.suo」で、隠しファイルになっています。
VSは色々と便利なのですが、その分裏でたくさんファイルを作っており、x64、debug、release、ipch、sdf、ncbなどなど、勝手にファイルが増えていきます。
普段はあまり気にならないですが、ソリューションをコピーしたりする際には一回全部消したいので、気がついたときに消しています。
これらのファイルは必要なら勝手にまた作られますので、消してしまっても構わないのですが、.suoを消した場合には上記の設定が元に戻ってしまいます。まあ、仕様と言えば仕様なんでしょうが、バグと言えばバグですね。
おそらく、ファイルの整理をしている際に勢い余って.vsフォルダを消してしまったのだと思います。
おわりに
この現象にあったのは数回目ですが、原因がよくわからず、ソリューションを作り直したりしていました。もう少し親切に作っておいてくれると助かります。
そもそもVSは、雑多なファイルを自由に作り過ぎの気がします。せめてもっと簡単に置き場所を設定出来るようにして欲しいなと思います。
ついでに、ipchとsdfはインテリセンス用などのファイルなのですが、容量が非常に大きいのでプロジェクトとは別の場所に保存するようにしています。その設定をする場所が、[ツール] – [オプション] – [テキストエディター] – [C/C++] – [詳細] – [フォールバック位置]って、すごく分かりにくくないですか?