VisualStudioでプロジェクトのファイル名等を変える

[ブログ](http://inaenomaki.hatenablog.com/entry/2017/01/08/114825)に移しました。変更があった場合はブログが更新されます。


#そもそも何をしたいのか
##ソリューション名等を変更する事自体は簡単
VisualStudio（以下VS）ではソリューション名やプロジェクト名を変更する際、ソリュションエクスプローラで選択もしくは右クリックして名前の変更をすれば簡単にそれらの名前を変更することが出来ますが、それはあくまでソリューション名やプロジェクト名の変更でしかなく、それらのあるフォルダ周りの名称は変更されません。
##フォルダやファイルの中身を変更したい
　それが何か悪いの？という話になるのですが、次の場合を見てみてください。
　例えば仮にRPGゲームを作ろう！！とC:\Users\you\Documents\Visual Studio 2015\Projects\RPGというソリューションを作り、開発を始めるとします。具体的にはその中のRPGプロジェクトを進めていくことになるのでしょうが、開発が進むに連れてタイトルが決まったりすると思います。例えば「おさげ少女と勇者の大冒険」という名前に決まったとしましょう。そこで、このタイトルに合わせてせっかくだからソリューション名やプロジェクト名も「OsageRPG」に変えてしまおう！となったとします。そこで、VS上でソリューション名やプロジェクト名を変えても、この"~\Project\RPG"以下のファイルにおいてファイル名の変更は"RPG.sln"が"OsageRPG.sln"に変わるだけで（隠しファイルの中などどうも実は一部変わっているっぽいが）その他には変化はありません。
##じゃあ直接エクスプローラーやらで変えてやればいいじゃないか
と思うでしょうがそう上手くは行きません。Project直下のRPGディレクトリに関してはそうしてやっても相対パス等も関係無いので問題無いでしょうが、"Project\RPG\RPG"（つまりはソリューションフォルダ直下のプロジェクトフォルダ）の名称をエクスプローラーで直接"Project\RPG\OsageRPG"変えてやったとしましょう。すると、フォルダ名を覚えている"RPG.sln"が「"Project\RPG\RPG"を探してるんだけど無いな。このソリューションおかしいぞ？」と"Project\RPG\OsageRPG"を見つけ出せずエラーを出します。
　これをなんとかして解決して、このソリューションフォルダの中のファイル名を何とか変更して"RPG"となっている部分を"OsageRPG"に変更できないか、というのが今回のお話です。
##想定されるファイル構成
※拡張子の書いていないものはフォルダ
-Project
--RPG(ソリューションフォルダ)
---RPG.sln
---RPG.sdf
---RPG.suo
---RPG(プロジェクトフォルダ)
----RPG.opensdf
----RPG.sdf
----RPG.vcxproj
----RPG.vcxproj.filters
----RPG.vcxproj.user
----RPG.suo
----(その他略)
---(その他略)
--(その他略)


----
----

#！！！！注意！！！！
この記事は僕が自己の備忘録も兼ねて書いたものです。自分はプロでもなんでもないのでおそらく間違いもあると思います。
そのため、この記事に基づいてリネームをしようという場合、必ずソリューションフォルダをバックアップしておいてください。
また、ここに書いてあることを元に何かをして何かが起きても僕は一切の責任を取りません。誤りは無いように努力してはいますが、過信せず自分でも調べたり考えたりしながらお読みください。
また、Gitなどのバージョン管理を使っている方はリネームでフォルダの名前を変えたりもするのでで少し面倒な事になるかもしれませんが、そこも自己責任でお願いします。まあ手動で直せる範囲だとは思いますが。
また、間違った点については指摘をくださると、僕も勉強になるので助かります。

----
----


#早い話の結論
##グーグル先生は偉大
　こういうことはやはり他の誰かもしたがっているもので、当然情報が転がっていました。
　まず"RPG.sln"が探そうとするプロジェクトファイルの名称を"Project\RPG\RPG"ではなく"Project\RPG\OsageRPG"に書き換えてやれば、エクスプローラーでプロジェクトフォルダの名前を変えてやっても問題なさそうです。そこで、RPG.slnをテキストエディタで開きます。

すると、
>Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RPG", "RPG\RPG.vcxproj", "{BE0A076E-539C-40BE-977E-7125AEEECEE7}"
EndProject

と書いてある部分があると思います。

これを

>Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsageRPG", "OsageRPG\RPG.vcxproj", "{BE0A076E-539C-40BE-977E-7125AEEECEE7}"
EndProject


と書き換えてやればプロジェクトフォルダの名前をエクスプローラーで"OsageRPG"に変更しても"RPG.sln"がちゃんと見つけてくれるのでちゃんと動くようになります。

#でもまだ前の名前のままのところもあるよね？
##気になりません？
　フォルダ名のみを変えたいという人は上の部分までで終わりです。でもきっと、「まだ"OsageRPG"になってないところがあるじゃないか！！」と気になってしまう人もいると思います。例えば"Project\RPG\OsageRPG"直下にある"RPG.vcxproj"や"RPG.vcxproj.filters"など…
　ではこいつらもおさげにしてやりましょう！！("OsageRPG"にリネームしよう、の意）
##おさげだ！
VS上で既にソリューション名を"OsageRPG"にしている場合、.slnファイルは既におさげになっているでしょう。では、さっき例に上がった、"Project\RPG\OsageRPG"直下にある"RPG.vcxproj"をリネームしていきましょう。
##どうせこうするんでしょ？
お察しの方も多いかと思いますが、こいつも単に"OsageRPG.vcxproj"などとエクスプローラーでリネームしてしまうと、エラーが出ます。ではどうすればいいのか？これも気付いている方もいらっしゃるかと思いますが、もう一度"OsageRPG.sln"をテキストエディタで書き換えます。

ここまでで

>Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsageRPG", "OsageRPG\RPG.vcxproj", "{BE0A076E-539C-40BE-977E-7125AEEECEE7}"
EndProject

上記の様になっているかと思いますが、これを

>Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsageRPG", "OsageRPG\OsageRPG.vcxproj", "{BE0A076E-539C-40BE-977E-7125AEEECEE7}"
EndProject

のように書き換えます。その後、"Project\RPG\OsageRPG"直下にある"RPG.vcxproj"を"OsageRPG.vcxproj"にエクスプローラーでリネームすればOKです。
##やったぜ！！
と言いたいところですが、これだとVS上でソースコードをフォルダ分け等をして整理して管理していた場合、それらの情報は失われ、ソースコードが整理もされずにプロジェクト内に入った状態になります。これをもう一度フォルダ分けしていったりするのは、正直面倒ですよね…
##しかし大丈夫
"Project\RPG\OsageRPG"直下にある"RPG.vcxproj.filters"がこのフォルダ分けなどの情報を持っているのでこいつをOsageRPG.vcxproj.filters"とリネームしてやればVS上では今までどおりの状態になっているかと思います。

#仕上げ
##残党狩り
さて、大体のリネームは終わりましたが、一部まだおさげになっていないファイルたちがいると思います。そいつらもおさげにしてやりましょう。
##ソリューションフォルダ
Projectフォルダ直下のソリューションフォルダは初めにも述べましたが普通にリネームしても構いません。ここまで"RPG"のままにしていたのは説明で混乱を避けるためでした。
##ソリューションフォルダ直下
おそらく.suoと.sdfという拡張子のファイルが未だにリネームがされていないと思います。
.suoは「ソリューションユーザーオプション」の略で、VSで行ったブレークポイントなどのユーザーレベルのカスタマイズ情報を持っています。
.sdfはインテリセンス用のキャッシュDBファイルです。おそらく「ソリューションデータベースファイル」とかその辺の略じゃないでしょうか。
.sdfは放っておいて開発していても自動で何処かのタイミングでリネーム後の名前のものが生成されると思いますが、何にしてもどちらもエクスプローラーでリネームして構いません。
##プロジェクトフォルダ直下
.opensdfと.sdfがリネームされていないかと思いますがこれもリネームして構いません。
.vcxproj.userもリネームされていないかと思いますが、これはデバッグと配置の設定などのユーザー固有のプロパティが格納されたものです。特定のユーザーのすべてのプロジェクトに適用されます。これもリネームして構いません。
#おしまい！
おそらくこれですべてのリネームが完了したでしょう。お疲れ様でした。.exe等は残ってるかもしれませんがその辺りは当然わかると思いますので自分でお願いします。

#参考文献
>http://d.hatena.ne.jp/oira3ryu/20110828/1314518629

>https://blogs.msdn.microsoft.com/vcblog/2010/03/09/intellisensebrowsing-options-in-vc-2010/

>https://msdn.microsoft.com/ja-jp/library/xhkhh4zs.aspx

>https://msdn.microsoft.com/ja-jp/library/ee862524.aspx