Visual Studioのバージョン間の違いについて(2008 → 2012)
軽く書くつもりだったが
また、長文になってしまった・・・
最近の記事を読んでくれている人にとっては
くどいかもしれないけど
現在のかげさんのデスクトップ環境は、
以下のようになっています。
Windws 7:Visual Studio 2008
Windws 8:Visual Studio 2012
以前は、ノートパソコンに
Visual Studio 2010の環境もあったのですが
初音ミク冒険記を2008で作っていた関係で
実家に帰る時にノートパソコンを持って行った時に
2010のソリューションに変換されるといった面倒くさいことがあったので
Visual Studio 2010の環境はアンインストールしちゃいました。
なので、2010に関する情報は残念ながらありません。
2015/07/20追記
2008→2010以上のタイミングが一番面倒なようです。
Windows8に2012を入れることにした段階で
Visual Studio 2012のソリューションファイルをと思っていました。
Visual Studio 2008で開けるようにしたい
ここからは毎回Visual Studioと入力するのが面倒なので
以下、Visual Studioを「VS」と省略します。
さて、マイクロソフトの情報によると
「旧バージョンの Visual C++ からのプロジェクトのアップグレード」
というページに
ビルドシステムは
VS2005で導入されたビルドシステムはVCBuild。
それがVS2010からMSBuildに変わったとあります。
つまり、かげさんのメイン開発環境のVS2008は
VCBuildを使ってます。
さらに「ビルド システムの変更点」には
.vcproj → .vcxproj
.vsprops → .prop
とある。
つまり、ソリューションファイルから連携している
プロジェクトファイルは、ファイル形式が変わった。
そして、プロジェクトのプロパティシート
要するにコンパイラやリンカーなどのビルドツールのスイッチ、
ユーザ定義マクロとかが変わったらしい・・・
他にもデバッグと配置の設定のユーザファイル、
VC++ディレクトリの設定が変わったようだ。
もしかして、VS2012にした時にリンクの情報とかが落ちた原因は
コレじゃないだろうか?
Effekseer用にVS2012にした時のことを考えてみる。
・DXライブラリのパスが抜けたのはコンパイラ指定
・リンカーの設定が変わったのはビルドツールのスイッチ
・デバッグ時のコマンドライン引数が消えたのはユーザファイル
うん、上記は、ビルドシステムの変更点から来ている感じがする。
リンカーのSAFESEH のスイッチに関連するリンクエラーは
DXライブラリの掲示板に
「VisualStudio2012について」という記事があり書いてあった。
VS2012でReleaseビルドすると起きる問題というのが載っていたので
これはDXライブラリとVSとの関係で発生するみたいなのでOKだ。
「PDB形式に互換性」については
リビルドではなくビルドにした関係で、
2012のビルドで生成されなかったPDBが
2008形式のPDBのまま残っているからだと思うので、これもOKだ。
ということで、VS2008 → VS2012のバージョンアップで
「Effekseerの導入に当たって調べた長い道のり?3」
に書いた問題の原因は、一通り納得できた感じだ。
ビルドシステムの変更点が中心だったことを考えると
アップグレード時点の指定を何か間違ったのかもしれないな・・・
それとVSのバージョンアップで面倒くさい記憶があったのは
もしかするとノートを2010にした時にこのあたりのことで
面倒だと思ったのかもしれない・・・
さて、ここまでの情報を前提条件として、ちょっと考えてみる。
.vcproj → .vcxproj
.vsprops → .prop
これは、ファイル形式が変わっているみたいなので
おそらくソリューションファイルのアップグレード時点で
バックアップとして従来の古い設定ファイルが残っている気がする。
残っていればプロジェクトファイルとプロジェクトの設定は
問題ないことになる。
ソリューションファイルについて考える
これまでのVSの各バージョンのソリューションファイルの構成から
想像ではVC++のバージョン情報とかVSのバージョン情報のコメントが変わって
プロジェクトファイルの拡張子が
新しい拡張子の方に変わっているだけじゃないだろうか?
この予想の元、VS2008の初音ミク冒険記と
VS2012のEffekseerを導入した初音ミク冒険記のフォルダをDFで比較する。
まず、フォルダを比較すると
バックアップフォルダが新しくできているので、後で確認する。
初音ミク冒険記を起動して作業に使ったフォルダが変わってるのはいいとして
SoundとTextureのフォルダが増えてるのはEffekseerの関連なので問題なし。
他に増えているのは、Effekseerの導入で試しに置いたエフェクトファイルなので
これも問題ない。
変更が入ったソースもEffekseerの導入関連で変更したソースなので問題なし。
そして、変換レポート(UpgradeLog.htm)が見つかった。
そういえば、そんなのがアップグレードした時に表示された気もする。
それによると
HatsuneMikuBoukenki.sln: このバージョンと Visual Studio 2010 SP1 でプロジェクトを問題なく開くことができるように、このプロジェクトには機能とは関係のない変更を加える必要があります。と書かれている。
うん、結局、変更が必要ってのは最初から書いてあった(笑)
そして、このメッセージから想像すると
VS2010 → VS2012だと問題なく移行できるんじゃないかと思えてきた。
この情報は、もしかするとVS2010 → VS2012に
バージョンアップしようとするときには役立つかもしれない。
(未検証だから、推測の域は出ないけど・・・)
2015/07/20追記
Visual Studioの2010、2012、2013をインストールしたので
VS2010のサービスパックを当ててから
Astlibraの4章の頃のソースを使って
2010でソリューションを作って2013で読み込む実験をした。
ソリューションファイル.slnなどのバージョンアップは
自動で行われるもので問題なくて、
リビルドしただけで2013で動きました。
1箇所SAFESEHの警告が出ましたが、
リンカーの設定を変更することで解決できました。
ソリューションの変換は、C#側も2008→2010が問題が起きやすそうなメッセージが出てた。
VC++だと2012→2013は割と単純みたい。
他には変換レポートには
HatsuneMikuBoukenki.vcproj: VCWebServiceProxyGeneratorTool はサポートされなくなりました。このツールはプロジェクト設定から削除されました。とあった。
そんなものは使っていないはず、なので問題なし。
HatsuneMikuBoukenki.vcproj: プロジェクト ファイル 'D:\Visual Studio 2008\Projects\HatsuneMikuBoukenkiEffecseer\HatsuneMikuBoukenki.vcproj' を変換しています。 HatsuneMikuBoukenki.vcproj: 新しいプロジェクト ファイル 'D:\Visual Studio 2008\Projects\HatsuneMikuBoukenkiEffecseer\HatsuneMikuBoukenki.vcxproj' に変換されました。これはvcproj → vcxproj変換がうまく言ったということでOKだ。
それとBackupフォルダができていて、そこに
HatsuneMikuBoukenki.sln
HatsuneMikuBoukenki.v11.suo
がバックアップされていた。
なるほど、ソリューションファイル(.sln)と
ソリューション ユーザ オプション(.suo)が退避されているのね。
それじゃあ本題のソリューションファイルとかを見てみよう。
左がVS2012、右がVS2008だ。
色が白い所は、同一内容のファイル
黄色い所は、違いがあるファイル
灰色の所は、存在しないファイル
vcprojが変わっているが、これは確認したところ
Win7とWin8でLuaのライブラリのフルパス指定のドライブ文字の違いが
2箇所(includeとlib)だったので、予想通り変更なしと見て良い。
問題のソリューションファイル。
差があるのは2~4行目の3行だ。
行ごとに差分を見てみる。
うん、最初の2行は予想通り、VSとVC++のバージョンが変わってて
最後の1行は、VC++のプロジェクトファイルの拡張子が
.vcproj → .vcxproj となっているだけである。
結論:予想通り
ということで
VS2012側の.slnとvcprojのバックアップを取ってから
VS2012側のフォルダにVS2008フォルダにある
.slnとvcprojを上書きする。
これでWindows7のVS2008側で.slnを開けるはず・・・
うん、開けたね!
これでビルドして2008で「ビルドができなければ」期待通りだ。
現在はEffekseer関連が2012、2013限定なので
Effekseer関連のことでビルドエラーが出るはず。
じゃあ、リビルド!
ん? 予想してたのは、
「VisualStudio(C++)2012,2013のみ対応しています。」という
ビルドエラーなんだけど
fatal error C1083: include ファイルを開けません。'stdint.h': No such file or directoryとか出てる・・・

stdint.hってC99のヘッダじゃなかったっけ?
2008でもありそうなんだけど・・・
まぁ、いいや。
エラーになるのがEffekseer.hということは、
EffekseerForDXLib.hの中からincludeしているからなので
Effekseer関連のエラーといえば、そうとも取れる。
念のため
#if 1900 > _MSC_VER && _MSC_VER >= 1700
#include "EffekseerForDXLib.h"
#else
#error VisualStudio(C++)2012,2013のみ対応しています。
#endif
としてビルドすると期待通り、2008だから
「VisualStudio(C++)2012,2013のみ対応しています。」という
ビルドエラーになった。
よし、Effekseer関連のロジックは
myEffect.cppに固めるつもりをしているから
そこで上記のように、Effekseer関連のロジックを
VC++のバージョンによる分岐を作れば
2008でEffekseer関連のロジックをビルドしないようにできるはず。
今回は、.slnと.vcprojを上書きコピーしたけど
2008側のファイルをEffekseerForDXLibの
サンプルソリューションファイルの名前を真似して
HatsuneMikuBoukenki.sln
↓
HatsuneMikuBoukenki_2008.sln
のように_2008をつけて、_2008.slnの中の.vcprojのファイル名を
_2008付きにしてやれば、同じcppやhを利用して
2008と2012の両方で起動できるようになる。
こうしておけば、cppやhが増えた時とかリンクするlibが増えた時は
増えたソースやライブラリの追加方法をまとめた記事を作っておくことで
XPやVISTA環境で初音ミク冒険記のソースを古いVisual Studioで開けるので
新しいバージョンのVisual Studioをインストール出来ない環境の人も
フォローできるんじゃないかな?
これで、ななしあさん、satoshifukushimaさん、フライさんたちの
マシンのOSがWindows 7以上になっていなかったとしても
初音ミク冒険記のソースを参考にし易いんじゃないかと思う。
Visual Studio 2008で開ける状態を
キープしておきたいのの理由は
エフェクトツールBISHAMON、Effekseer、Prominenceのこととか、いろいろまとめたかったけど、実際は、まとまりきっていないZE☆
にも少し書いたように
初音ミク冒険記に関してのコメント率の高い人たちの
環境がXPやVISTAという話が出ていたからだ。
最近はコメントをもらえていないから
普段は見てもらえていないのかもしれないけど
2012年とか、制作の早い段階から
初音ミク冒険記の開発の励みになるコメントをくれている人たちを
ガン無視する形でVisual Studioをバージョンアップするのだけは
避けたいと思ってたから、なんとか目処が立ちそうで良かったと思う。
とりあえず、Effekseer関連の処理をmyEffect.cppに持って行き
Luaから呼び出せるところまでは、今の環境のまま作業しようと思う。
で、それができたら、
Win8側にVisual Studio Community 2013を入れて
Effekseer関連のビルドに問題が起きないことを確認して
今回みたいにVS2012とVS2013のソリューションや
プロジェクトファイルの比較をしてとやって
その上で、VS2013でビルドが通ったソースのままで
VS2008で開けるというのを検証できてから
メイン開発環境にVS2013を入れようと思う。
若干くどい回り道だが、たぶん検証にも意味はあるでしょうってことで。
| 【固定リンク】 | 【コメント (0)】 | 【トラックバック (0)】
このエントリーへのリンク
トラックバック
この記事へのトラックバックの一覧です: Visual Studioのバージョン間の違いについて(2008 → 2012):
コメント
このブログの新着コメントをRSSリーダに登録する為のxml