2010-09-20 12 views
1

Я нашел справедливую информацию о том, как сборка .NET должна загружаться на основе флагов, установленных в заголовке сборки. Страницы, такие как Flipping bits on managed images to make them load with the right bitness..., похоже, предполагают, что если у вас есть заголовок следующим образом.Понимание заголовка сборки с помощью CorFlags (почему моя сборка загружается в 32-разрядное адресное пространство?)

PE : PE32 

ILONLY : 1 

32BIT : 0 

Он составлен как «Any CPU», и можно ожидать, что для загрузки с 32-битной CLR на 32-разрядных платформах и с 64-битной CLR на 64-разрядных платформах. Это именно то поведение, которое я ожидал и хотел.

К сожалению, это не похоже на мою 64-разрядную машину Windows 7. Сборка загружается в 32-разрядное адресное пространство. Я знаю, что смогу заставить проблему во время компиляции построить с помощью x64, но почему это делает неправильную вещь в первую очередь?

Как исправить эту проблему? Является ли какой-то проблемой реестра или среды, которую я еще не наткнулся?

+0

Является ли ваша сборка каким-то образом связана с 3-разрядными 32-разрядными сборками или родными DLL? – nos

+0

Я так не думаю. Я запускал файл depend.exe на сборке, и у всех DLL был тип процессора x64 (кроме IESHIM.dll, который не был найден вообще, но некоторые поиски, казалось, предполагали, что это обычно происходит и не является источником проблемы). Сама сборка (исполняемый файл) была указана после ее зависимостей с типом CPU x86, но она не должна соответствовать тому, как были установлены биты заголовка. – jmellor

ответ

2

Вы ничего не говорили о вид сборки. Только начальная сборка определяет бит-процесс процесса. EXE. Любая DLL должна последовать ее примеру.

+0

Это деталь, которую я забыл включить. Сборка - это исполняемый файл. – jmellor

+0

Документируйте, как вы уверены, что он работает в 32-битном режиме. И убедитесь, что 64-разрядная версия .NET фактически установлена ​​на вашем компьютере. –

+0

У меня есть и C: \ Windows \ Microsoft.NET \ Framework и Framework64. Оба имеют v2.0.50727 v3.0 v3.5 и v4.0.30319. Я использую taskmgr, чтобы проверить, что сборка запущена в 32-битном режиме (имя процесса добавлено с помощью * 32). – jmellor

 Смежные вопросы

  • Нет связанных вопросов^_^