Программное обеспечение .NET, работающее на x64, но скомпилированное на x86 для любого процессора (VS2008)

У меня проблема, из-за которой я получаю ошибки времени выполнения с скомпилированной программой. Это прекрасно работает в среде разработки (x86), но не в производственной среде (x64).

Я нашел эту статью, что, по-видимому, подразумевает, что компиляция программного обеспечения как любого процессора может запускать программное обеспечение как программное обеспечение x64, если оно работает в 64-битной среде.

Так ли это, и если да, то следует ли когда-либо компилировать программное обеспечение под любым процессором (поскольку это, по-видимому, приводит к несоответствию между двумя средами)?


person Paul Michaels    schedule 25.02.2011    source источник
comment
Это полностью зависит от того, что вы делаете. Трудно дать вам совет, не зная, что такое среда или какие ошибки вы получаете.   -  person Jon Skeet    schedule 25.02.2011
comment
Ошибки непостоянны и варьируются от зависания программы до ошибок доступа к памяти.   -  person Paul Michaels    schedule 25.02.2011
comment
Windows для Windows для X64... не уверен, что это используется движком .NET.   -  person Tony The Lion    schedule 25.02.2011


Ответы (1)


AnyCPU отлично подходит, если вы используете только управляемый код. Управляемый код может выполняться в 32-битном или 64-битном процессе. С AnyCPU фреймворк выбирает разрядность, характерную для ОС.

То же самое не верно для неуправляемого кода. Его необходимо скомпилировать либо как 32-битный, либо как 64-битный код. Конечно, благодаря подсистеме WoW64 64-битная Windows может запускать 64-битные процессы.

Но 64-разрядные процессы не могут загружать 32-разрядные модули (DLL, OCX и т. д.).

Это означает, что если ваша программа использует какие-то неуправляемые модули, лучше обязательно установить разрядность вручную, чтобы все компоненты имели одинаковую разрядность.

person Helge Klein    schedule 25.02.2011