Я нашел справедливую информацию о том, как сборка .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, но почему это делает неправильную вещь в первую очередь?
Как исправить эту проблему? Является ли какой-то проблемой реестра или среды, которую я еще не наткнулся?
Является ли ваша сборка каким-то образом связана с 3-разрядными 32-разрядными сборками или родными DLL? – nos
Я так не думаю. Я запускал файл depend.exe на сборке, и у всех DLL был тип процессора x64 (кроме IESHIM.dll, который не был найден вообще, но некоторые поиски, казалось, предполагали, что это обычно происходит и не является источником проблемы). Сама сборка (исполняемый файл) была указана после ее зависимостей с типом CPU x86, но она не должна соответствовать тому, как были установлены биты заголовка. – jmellor