LoginSignup
7
12

More than 3 years have passed since last update.

【.NET】 私、 [対象プラットフォーム] は [Any CPU] でって言ったよね!

Last updated at Posted at 2020-08-16

記事のタイトルに深い意味はありません。

そんな感じのタイトルの作品があったなぁと思って。

概要

先日C#で簡単なツールを作っていたら、WOW64ファイル システム リダイレクト がかかっていた。 Any CPU でコンパイルしているはずなのに、とタスク マネージャーを見たら、おいおい 32bit プロセス で動いているじゃねぇかFxxxxxck!

設定

プロジェクトの プロパティビルド より 32bitを選ぶ のチェックを外す。
(Visual Studo 20019の場合)

Visual Studo 20019.png

効果

言わずもがな、JavaCLR などのVM型実行環境って そもそも Any CPU にこそ真価が有ると思うのだが。。。

  • Any CPUで動く。
    • x86版 Windows では32bitで動く。
    • x86_64版 Windows では64bitで動く。
      ⇒ フォルダ リダイレクトがかからなくる。
      ⇒ 無計画に P/Invoke すると BadImageException で死にやすい。
           (無計画が悪い。。。:sweat_smile:)

これ何のための設定?

  • 対象プラットフォーム には Any CPU でビルドしてるのに、
    x86_64版 Windows 上でも 32bit プログラム として動かしたいってこと? なんで????:thinking:
  • x86_64版 Windows でも x86_64 モード より x86 モード のプログラムの方が早い事が多いとか、そんな話?:thinking:
    ( x86_64 CPU には 実行モードを切り替える コンテキスト スイッチ があり、 Windowsではプロセス単位で切り替えに対応し、 ネイティブ コード で実行させていたと思った。)
  • AArch64 にも 32bit モードがあるらしいので、 ARM CPU も見据えた設定? :thinking:

Visual Studio 20013から設定はあった様だけど、とりあえず全然意味が分からない。。。

(追記)

matrix.png

こういうこと?
arm版やia64版なんて持っていないからわからないけど。
(x86_64のx86モードを良しとするなら、ia64版やarm版 Windowsのx86エミューレーションも効いたりするのかな?)
platform:anycpu32bitpreferred のARMがやっぱポイントなのかな?

参考

7
12
12

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
12