Проект VS 2010 всегда нацелен на x86 / 32 бит - PullRequest
0 голосов
/ 07 августа 2011

У меня есть проект, который, кажется, всегда нацелен на x86 / 32 бит, и я не могу понять, почему.Я просмотрел все проекты в решении и убедился, что PlatformTarget - AnyCPU.

Используя dumpbin для проверки всех двоичных файлов, я получаю '14C machine (x86)'.

Сборочная машина x64, хотя ранее была x86.

Что еще могло быть причинойэто и что я должен проверить?

1 Ответ

4 голосов
/ 07 августа 2011

Вы должны говорить о выводе, который вы видите из 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-битный процесс, описана в этот ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...