Почему приложение Any CPU работает как x86 на машине x64?

У меня установлено приложение Any CPU в Program Files (x86). На одном компьютере с Windows 7 x64 он работает как x64, как и ожидалось, а на другом компьютере с Windows 7 x64 он работает как x86!

Как это может быть? Я ожидал, что он будет работать как x64 на обеих машинах. В чем может быть причина и что я могу сделать, чтобы он всегда работал как x64?

Имеет ли значение, откуда я его запускаю - Program Files (x86) в моем случае?


person BobbyHill    schedule 10.06.2011    source источник
comment
Находится ли программа в Program Files (x86) на обеих машинах?   -  person Will A    schedule 10.06.2011
comment
@WillA неважно, где лежит программа. 32-битная программа может храниться в \Program Files, а 64-битная программа может находиться в \Program Files (x86). Все они будут загружены правильно, потому что информация о наборе команд была записана в заголовке.   -  person phuclv    schedule 10.05.2014


Ответы (1)


Вероятно, вы связали некоторые сборки, которые не являются Any CPU, но содержат собственный код (или скомпилированы как x86), что заставляет весь процесс возвращаться к x86.

Чтобы понять, как компилируются ваши сборки, может помочь связанный с этим вопрос о переполнении стека: Как определить, была ли сборка .NET создана для x86 или x64. ? *.

Примечание: расположение исполняемого файла в файловой системе не имеет значения.

person Dario Solera    schedule 10.06.2011
comment
Но тогда как ему удалось запустить x64 на другой машине? - person GSerg; 10.06.2011
comment
Дикая догадка: разные версии одной и той же зависимой сборки в GAC. Я столкнулся с этой проблемой со сборками TFS и потратил буквально дней, чтобы разобраться в ней. - person Dario Solera; 10.06.2011
comment
@GSerg - например, если у вас есть ссылочные драйверы (например, драйверы базы данных), и у одного пользователя установлены только 32-разрядные версии, это заставит ваше приложение также работать как 32-разрядное. - person slugster; 10.06.2011
comment
Я только что столкнулся с похожей проблемой. В моем случае исправить это было легко - на вкладке «Сборка» в свойствах проекта была включена 32-разрядная версия Prefer (чуть ниже целевой платформы, которая называлась Any CPU). - person Viliam; 04.03.2019
comment
Хорошенький @Viliam. Это было исправлением для меня. - person ossentoo; 28.04.2020
comment
Что ж, это раздражает. У меня была выбрана конфигурация Active (Debug), а параметр Prefer 32-bit не отмечен. Я изменил конфигурацию на Debug, и теперь она проверена? И он остается отмеченным при возврате к активному (отладка). Похоже, что с этим флажком есть ошибка, иногда показывающая, что он не установлен, когда это не так. - person Kevin Doyon; 17.12.2020