SourceChord

C#とXAML好きなプログラマの備忘録。最近はWPF系の話題が中心です。

VS2012のC#プロジェクトのプラットフォーム構成(Any CPU・32ビットの優先)

VS2012では、C#プロジェクトのプラットフォーム構成のデフォルト設定が、AnyCPU(32ビットの優先)となっています。
VS2012を半年ほど使ってたけど、今まで気づいてなかった。
というか、AnyCPU(32ビットの優先)なんて設定が増えていたとは。。。


ちなみにVS2010の時に、コンソールアプリやWPFなどのexe形式のものはx86、クラスライブラリなどはAnyCPU、というデフォルト設定に変更になっていました。
その辺の背景は↓の記事に詳しく書かれています。
http://d.hatena.ne.jp/siokoshou/20091102/p1


それが、VS2012でAnyCPUになっていて、なぜ!?と思ったのですが、調べてみたらこれは今までのAnyCPUとは異なったもののようです。

参考リンク

http://www.infoq.com/jp/news/2012/04/anycpu_vs11
http://msdn.microsoft.com/ja-jp/library/vstudio/zekwfyz4.aspx
このAnyCPU(32ビットの優先)のときは、32bitOS上では32bitで動作しますが、64bitOS上でも32bitで動作します。
ここまでは「x86」構成と同じ動作。で、「x86」との違いは、「AnyCPU(32ビットの優先)」ではARMのWindows環境でも動作する、という点だそうです。


ということで、この辺の動作をまとめてみました。

C#プロジェクトのデフォルト構成の変遷

VSのバージョン WPFやコンソールアプリ クラスライブラリ
VS2008まで Any CPU Any CPU
VS2010 x86 Any CPU
VS2012 Any CPU(32ビットの優先) Any CPU(32ビットの優先)

※ただし、VS2012で「Any CPU(32ビットの優先)」が適用されるのは、ターゲットフレームワークが.Net4.5の場合だけ。それ以外の時は「Any CPU」が適用される。

C#プロジェクトのプラットフォーム構成の種類

プラットフォーム構成の種類 意味
Any CPU 32bitOS上では32bitのCLR上で動作。64bitOS上では64bitで動作。
x86 32bitのCLR上で動作
x64 64bitのCLR上で動作。32bitOSでは実行できない。
Any CPU(32ビットの優先) 32bitOSでも64bitOSでも、32bitのCLR上で動作。.Net4.5を対象とする場合のみ指定できる。


こういう設定って、いつかドツボにはまる原因になったりしそうだから、頭の片隅に入れておこうかと思う。