2010-06-24 1 views
2

Моя программа (консольное приложение) ссылается на несколько других сборок (многие библиотеки с открытым исходным кодом). Я построил сборку с опцией «Any CPU» (с использованием VS2008). Когда я запускаю сборку из 64-битной командной строки на компьютере с Windows Server 2008 x64, процесс всегда начинается как 32-битный процесс!Отдельная сборка с архитектурой x86, вызывающая целую сборку для выполнения как 32-разрядная

Я просмотрел свои ссылки, и кажется, что у меня есть ссылка на 32-битную сборку, на которую ссылаются. Может ли эта единственная ссылка заставлять всю сборку запускаться как 32-битная?

Кроме того, я использую ILMerge для объединения всех ссылочных сборок в единую сборку. Может быть, это как-то связано с этим?

Не мог бы кто-нибудь помочь мне выяснить, что здесь происходит?

ответ

6

Если вам нужно загрузить 32-разрядную сборку, весь процесс должен быть 32 бит. Вы можете настроить «Любой процессор» для своего основного приложения, но тогда он будет работать на 64 бит и не будет работать во время выполнения, когда он попытается загрузить 32-разрядную сборку.

ILMerge достаточно умен, чтобы переключать главную сборку с AnyCPU на x86, если у вас есть сборка x86 как часть вашего слияния, чтобы это не было проблемой.

Если вы хотите запустить 64-разрядную версию, вам необходимо, чтобы все сборки были 64-битными или AnyCPU.

+0

Отлично. Благодаря! –

0

Да, это, вероятно, ваша проблема. Я бы восстановил сборку как «Любой процессор».

+0

Я действительно создал сборку на самом деле. Одна из ссылочных сборок только 32-разрядная. Я предполагаю, что когда я ILMerge все, то ILMerge признает единственную 32-битную сборку и устанавливает все 32-разрядную вещь? –

+1

@ Джеффри: Да. Однако, если у вас есть зависимость от 32-битной сборки, вы будете вынуждены запускать 32-разрядную версию - вы не можете загрузить 32-разрядную сборку в 64-битный процесс. –

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