С# компиляция для 32/64 бит или для любого процессора?

Возможный дубликат:
Цель Visual Studio "Любой процессор"

Я заметил, что при компиляции кода С# в VS обычно существуют опции для компиляции для 32/64 бит-систем, а также для компиляции для любого процессора.

Какая разница между двумя параметрами? Выбирает ли какой-либо процессор только компиляцию до промежуточного байтового кода, в то время как первый параметр компилируется до машинного кода (для меня это маловероятно)? Или что-то еще?

Ответ 1

На машине 32-бит:

  • Любой процессор: работает как 32-разрядный процесс, может загружать сборки Any CPU и x86, получит BadImageFormatException если он пытается загрузить сборку x64.

  • x86: тот же, что и Любой CPU.

  • x64: BadImageFormatException всегда.

На машине 64-бит:

  • Любой процессор: работает как 64-разрядный процесс, может загружать сборки Any CPU и x64, получит BadImageFormatException если он пытается загрузить сборку x86.

  • x86: работает как 32-разрядный процесс, может загружать сборки Any CPU и x86, получит BadImageFormatException если он пытается загрузить сборку x64.

  • x64: то же, что и Любой процессор.

Это компилятор JIT, который генерирует код сборки, совместимый с запрошенной целью на основе этого флага.

Ответ 2

x86 - Ваше программное обеспечение всегда будет работать в 32-битном режиме, как на 32-битных системах, так и на 64-битных системах.

x64 - Ваше программное обеспечение всегда будет работать в 64-битном режиме, будет работать на 64-битной системе, но не будет работать на 32-битной системе.

Любой процессор - ваше программное обеспечение будет работать в соответствии с вашей ОС. если у вас 32-битная ОС, код будет работать в 32-битном режиме, если у вас есть 64-битная ОС, ваш код будет работать в 64-битном режиме.