Что означает флаг "Предпочтительный 32-разрядный" для приложений, управляемых Visual Studio 11 (С#, VB)?

Только что установлен предварительный просмотр разработчика Visual Studio 11. Я вижу новый параметр в свойствах проекта под названием "Предпочитаю 32-разрядный" при компиляции управляемого (С#, VB) приложения с указанным объектом AnyCPU. Это не является вариантом для библиотек классов, а только для приложений верхнего уровня.

Что указывает этот флаг?

Ответ 1

Вероятно, это приложение AnyCpu, но когда доступно 32 бит, shouold запускается как таковой. Это имеет смысл - 64-разрядные приложения используют больше памяти, а иногда вам просто не нужно пространство памяти;)

Ответ 2

EDIT: Приложение, скомпилированное с "Любой предпочтительный 32-битный процессор", совместимо с x86, x64 и ARM, тогда как x86 совместим только с x86, x64, а не с ARM. Подробнее см. this.

Ответ 3

Есть хорошая статья в Что AnyCPU действительно имеет значение с .NET 4.5 и Visual Studio 11.

Короткий ответ на ваш вопрос: "При использовании этого аромата AnyCPU семантика такова:

Если процесс выполняется в 32-разрядной системе Windows, он работает как 32-разрядный процесс. IL компилируется в машинный код x86. Если процесс выполняется в 64-разрядной системе Windows, он работает как 32-разрядный процесс. IL компилируется в машинный код x86. Если процесс выполняется в системе ARM Windows, он работает как 32-разрядный процесс. IL компилируется в машинный код ARM. Разница между "любым предпочтительным 32-битным процессором" и "x86" заключается только в следующем: приложение .NET, скомпилированное в x86, не будет работать в системе ARM Windows, но приложение "Любое CPU 32-битное предпочтительное" будет успешно работать. "

Ответ 4

Я думаю, что приведенный комментарий неверен, ссылаясь на ссылку:

"....NET-приложение, скомпилированное в x86, не будет работать в системе ARM Windows, но приложение" Любое процессорное 32-битное предпочтительное приложение "будет успешно запущено".