記事のタイトルに深い意味はありません。
そんな感じのタイトルの作品があったなぁと思って。
概要
先日C#で簡単なツールを作っていたら、WOW64 の ファイル システム リダイレクト がかかっていた。 Any CPU でコンパイルしているはずなのに、とタスク マネージャーを見たら、おいおい 32bit プロセス で動いているじゃねぇかFxxxxxck!
設定
プロジェクトの プロパティ の ビルド より 32bitを選ぶ のチェックを外す。
(Visual Studo 20019の場合)
効果
言わずもがな、Java や CLR などのVM型実行環境って そもそも Any CPU にこそ真価が有ると思うのだが。。。
-
Any CPUで動く。
- x86版 Windows では32bitで動く。
-
x86_64版 Windows では64bitで動く。
⇒ フォルダ リダイレクトがかからなくる。
⇒ 無計画にP/InvokeするとBadImageExceptionで死にやすい。
(無計画が悪い。。。
)
これ何のための設定?
-
対象プラットフォームにはAny CPUでビルドしてるのに、
x86_64版 Windows上でも32bit プログラムとして動かしたいってこと? なんで????
-
x86_64版 Windowsでもx86_64 モードよりx86 モードのプログラムの方が早い事が多いとか、そんな話?
(x86_64CPU には 実行モードを切り替えるコンテキスト スイッチがあり、 Windowsではプロセス単位で切り替えに対応し、 ネイティブ コード で実行させていたと思った。) -
AArch64にも 32bit モードがあるらしいので、ARM CPUも見据えた設定?
Visual Studio 20013から設定はあった様だけど、とりあえず全然意味が分からない。。。
(追記)
- -platform (C# コンパイラ オプション) | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/compiler-options/platform-compiler-option
こういうこと?
arm版やia64版なんて持っていないからわからないけど。
(x86_64のx86モードを良しとするなら、ia64版やarm版 Windowsのx86エミューレーションも効いたりするのかな?)
platform:anycpu32bitpreferred のARMがやっぱポイントなのかな?
参考
-
-platform (C# コンパイラ オプション) | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/compiler-options/platform-compiler-option -
.net — Visual Studioの "Any CPU"ターゲットとはどういう意味ですか?
https://www.it-swarm.dev/ja/.net/visual-studio%E3%81%AE-any-cpu%E3%82%BF%E3%83%BC%E3%82%B2%E3%83%83%E3%83%88%E3%81%A8%E3%81%AF%E3%81%A9%E3%81%86%E3%81%84%E3%81%86%E6%84%8F%E5%91%B3%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F/958269106/ -
CLR via C# - Jeffrey Richter - Google ブックス
https://books.google.co.uk/books?id=36tCAwAAQBAJ&pg=PT38#v=onepage&q&f=false -
Visual Studioの[32ビット優先]設定の目的は何ですか、また実際にはどのように機能しますか?
https://qastack.jp/programming/12066638/what-is-the-purpose-of-the-prefer-32-bit-setting-in-visual-studio-and-how-does -
What AnyCPU Really Means As Of .NET 4.5 and Visual Studio 11 - DZone IoT
https://dzone.com/articles/what-anycpu-really-means-net -
Visual Studio 11 と .NET 4.5 で Microsoft が AnyCPU を再定義
https://www.infoq.com/jp/news/2012/04/anycpu_vs11/

