Подтвердить что ты не робот

Как .NET определяет архитектурный интерфейс процесса?

Мне просто интересно, как .NET определяет архитектурный интерфейс процесса, если я компилирую исходный код в настройке конфигурации "Любой процессор", Я всегда думал, что если вы запустите этот процесс на x64-компьютере, это будет 64-битный процесс. Однако приведенный ниже пример показывает совершенно другую вещь.

У меня есть простая консольная программа с таким кодом:

   static void Main(string[] args)
        {
            Console.WriteLine("Process Type: {0}", Environment.Is64BitProcess?"64 Bit":"32 Bit" );

            Console.ReadLine();
        }

и настройка конфигурации такова:

Configuration Setting

И мой процессор 64 бит:

Computer Processor

Наконец, результат показывает

Enter image description here

Не могли бы вы дать некоторые идеи?

4b9b3361

Ответ 1

Смотрите этот пост в блоге Microsoft, в котором говорится:

В .NET 4.5 и Visual Studio 11 сыр перемещен. По умолчанию для большинства проектов .NET это снова AnyCPU, но есть более одного теперь это означает AnyCPU. Существует дополнительный подтип AnyCPU, "Любой CPU 32-бит предпочтительный" , который является новым стандартом (в целом, есть теперь пять вариантов для/компилятора С#: x86, Itanium, x64, anycpu и anycpu32bitpreferred). При использовании этого аромата AnyCPU, семантика:

  • Если процесс выполняется в 32-разрядной системе Windows, он запускается как 32-разрядный обработать. IL компилируется в машинный код x86.
  • Если процесс выполняется в 64-разрядной системе Windows, он запускается как 32-разрядный обработать. IL компилируется в машинный код x86.
  • Если процесс выполняется в системе ARM Windows, он работает как 32-разрядный процесс. IL компилируется в машинный код ARM.

Отключение "Предпочтение 32-битного" отключит это поведение.

Ответ 2

Это произойдет, если вы установите флажок Предпочтительный 32-бит на вкладке "Сборка" в "Свойства проекта".