Dumpbin.exeに表示される出力については、/ headersオプションを使用して説明する必要があります。どのAnyCPUに設定プラットフォームターゲットでコンパイルされます.NETアセンブリ上で実行すると次のようになります。
Dump of file ConsoleApplication1.exe
PE signature found
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
14C machine (x86)
3 number of sections
4E3E987F time date stamp Sun Aug 07 08:51:59 2011
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
102 characteristics
Executable
32 bit word machine
etc..
はい、IMAGE_FILE_HEADER.Machine値は0x14c、(x86の別名)IMAGE_FILE_MACHINE_I386の値に設定されています。これは重要ではありません。ターゲット名AnyCPUは、関係のない最も強いヒントかもしれません。 x64オペレーティングシステムと同様に、x86でも動作します。 corflags.exeであるあなたが本当に使いたい
は、それはあなたのファイルにCORヘッダを示しています
Version : v4.0.30319
CLR Header: 2.5
PE : PE32
CorFlags : 1
ILONLY : 1
32BIT : 0
Signed : 0
32BITフラグが重要な一つであり、0はAnyCPUが使用されたことを示しています。 ILONLY = 1は、アセンブリにILのみが含まれ、マシンコードは含まれないことを示します。 C++/CLI言語でアセンブリを作成すると、0になります。
マシンをx64に設定してイメージファイルを作成します。私はそれが.NET 3.0(別名.NET 2.0 SP1)で導入されたと思います。プラットフォームターゲットをx64に設定すると、マシンタイプフィールドはIMAGE_FILE_MACHINE_AMD64(別名x64)に設定されます。これは、プログラムが32ビットオペレーティングシステム上で実行されないことと、メインスレッドが1 MBスタックの代わりに4 MBスタックで開始されるという点を除いて、大きな違いはありません。
32ビットの実行可能イメージを64ビットプロセスに変換する魔法は、this answerに記載されています。
プラットフォーム固有のP/Invokeを実行していますか? x86またはx64のビルドマシンとは何ですか? –
私が知っているプラットフォーム固有のP/Invokeはありません。 – Craig
テキストエディタで.csproj(または.vbprojファイル)を見ると、Visual Studioで作成された新しく作成されたプロジェクトと比較して、コンパイル対象が賢明に見えますか?または彼らは奇妙に見える? –