Вы должны говорить о выводе, который вы видите из Dumpbin.exe с параметром / headers.Это выглядит так при запуске сборки .NET, скомпилированной с целью платформы, установленным в AnyCPU:
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, значение IMAGE_FILE_MACHINE_I386 (он же x86),Это не имеет значения, возможно, самый сильный намек на то, что это не имеет отношения, - это имя цели: AnyCPU.Он работает как на x86, так и на операционной системе x64.
Что вы действительно хотите использовать, так это 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-разрядной операционной системе и что основной поток будет начинаться со стека 4 мегабайта вместо стека 1 МБ.
Магия, которая превращает 32-битный исполняемый образ в 64-битный процесс, описана в этот ответ .