「任意の CPU」用にコンパイルされた WinForms アプリを、アプリを再コンパイルせずに 64 ビット サーバー上で「x86」として実行するように構成できますか? 具体的には、この目的を達成するための app.config 設定またはコントロール パネル アプレットを探しています。お客様のクライアントはすべて x86 ですが、サーバーは x64 です。管理者がシステムを構成および監視できるように、サーバーに WinForms アプリをインストールしたいと考えています。サーバーのためだけに再コンパイルしたくはありません。
2 に答える
http://www.request-response.com/blog/PermaLink,guid,34966ef8-3142-46b2-84e0-372b5c36ddcc.aspxから
ただし、コードがコンパイルされた後でも、このデフォルトの動作を制御およびオーバーライドできます。SDK には corflags.exe という便利なツールがあり、「anycpu」でコンパイルされたコードが 64 ビット環境で 32 ビット プロセスを使用するように強制できます。
このユーティリティの使用方法は、 http://msdn.microsoft.com/en-us/library/ms164699( VS.80 ).aspx にあります。
マネージド コードを正しく記述した場合、構成は必要ありません。64 ビット マシンに適切なフレームワークがインストールされている限り、JIT プロセスは 32 ビット要件と 64 ビット要件の違いに対処します。
独自のコードで考慮する必要がある唯一のことは、P/Invoke を実行しているかどうかです。その場合、HANDLE または void* 型を使用する API 関数を呼び出すときはいつでも、System.Int32 ではなく、常に System.IntPtr を使用するようにする必要があります。.NET の世界では、int データ型は 64 ビット マシン上でも常に 32 ビットです。同様に、アーキテクチャに関係なく、long は常に 64 ビットです。
ただし、IntPtr は常に void* のサイズであるため、実行しているマシンのアーキテクチャに応じて適切に JIT が異なるサイズになります。