.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