«Предпочитать 32-разрядный» в Visual Studio Создает 64-разрядный код в консольном приложении (. NET Core) - PullRequest
0 голосов
/ 20 февраля 2020

Создание простой консоли. NET Базовое приложение в Visual Studio 2019 по умолчанию теперь будет иметь платформу AnyCPU (без установленной Prefer 32-bit, как это было с NET Framework Framework ) .

И все же, если переключиться на Prefer 32-bit, результаты больше не будут соответствовать старому логу c, в результате чего будет сгенерирован исполняемый файл x86, но вместо этого будет создан x64.

Несколько быстрых кодов для проверки:

Console.WriteLine("Initially allocated: {0} bytes", AppDomain.CurrentDomain.MonitoringTotalAllocatedMemorySize);
int noNumbers = 1000000;
object[] objectArray = new object[noNumbers];
Console.WriteLine("Allocated in the end: {0} bytes", AppDomain.CurrentDomain.MonitoringTotalAllocatedMemorySize);

Настройки платформы (красным) рядом с выводом кода, показывающие количество выделенной памяти (оранжевым):

enter image description here

Элемент в массиве object[] займет 4 байта на платформе x86 и 8 байтов на платформе x64. Вывод ясно показывает, что это код x64. VMMap также подтверждает эту находку, основываясь на 64-битных виртуальных адресах, видимых в процессе (зеленое выделение):

enter image description here

Необходимо специально выбрать x86 в качестве платформы для получения 32-битного исполняемого файла:

enter image description here

Генерируется ли 64-битный выходной код при установке Prefer 32-bit для включения в Visual Studio - преднамеренное изменение?

Протестировано в Visual Studio 2019 16,5 Windows 10 x64

1 Ответ

0 голосов
/ 21 марта 2020

Как отмечается в комментарии Ханса Пассанта, Visual Studio создаст (среди других файлов) один .exe - который полностью игнорирует настройку Prefer 32-bit, и один .dll, который будет подчиняться настройке (переключая 32BITPREF) .

Я связался со службой поддержки Microsoft, которая, в свою очередь, поговорила с ребятами из команды Visual Studio. Оказывается, это известная вещь, и проблема GitHub уже существует для полного удаления Prefer 32-bit для NET основных проектов. На самом деле служба поддержки Microsoft классифицировала это как ошибку.

Я также провел несколько тестов, и в настоящее время для проекта. NET Core Console App, различные целевые настройки платформы в Visual Studio определит следующие результаты для .exe и .dll соответственно:

enter image description here

Полный анализ заголовков файлов и получающийся процесс ' битность здесь .

...