記事のタイトルに深い意味はありません。
そんなタイトルの作品があったなぁと思って。
概要
先日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 プログラムとして動かしたいってこと? なんで????![:thinking: :thinking:]()
x86_64版 Windowsでもx86_64 モードよりx86 モードのプログラムの方が早い事が多いとか、そんな話?![:thinking: :thinking:]()
(x86_64CPU には 実行モードを切り替えるコンテキスト スイッチがあり、 Windowsではプロセス単位で切り替えに対応し、 ネイティブ コードで実行させていたと思った。)AArch64にも 32bit モードがあるらしいので、ARM CPUも見据えた設定?![:thinking: :thinking:]()
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がやっぱポイントなのかな?

)
