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

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

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

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


person helloworld922    schedule 08.03.2011    source источник
comment
См. Также: Цель Visual Studio «Любой процессор»   -  person Cody Gray    schedule 08.03.2011


Ответы (2)


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

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

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

  • x64: BadImageFormatException всегда.

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

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

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

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

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

person Jaroslav Jandek    schedule 08.03.2011
comment
Это отличный ответ, охватывающий все перестановки. Просто добавьте, что этот ответ определит, является ли DLL / сборка 32-битной, 64-битной или любым процессором. - person Dan W; 10.07.2013
comment
Похоже, это изменилось в .NET 4.5. Вот ссылка на обновленный ответ: stackoverflow.com/a/12066861/1993242 - person Alon Catz; 21.03.2016
comment
Мне было интересно, почему мой AnyCPU не работает как 64-битный на моем ПК. Оказывается, теперь у нас есть 32-битный флаг предпочтения. См. Ответ выше для получения дополнительной информации. - person Carra; 07.02.2018

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

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

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

person Gilad    schedule 08.03.2011
comment
В качестве примечания к этому ответу, это просто флаг в двоичном файле, какой вариант вы выбираете, не меняет его содержимое. Фактически его можно изменить позже, используя инструмент CorFlags. - person Sedat Kapanoglu; 08.03.2011