Может ли приложение x64 использовать сборки x86 - и наоборот? - PullRequest
30 голосов
/ 23 апреля 2010

Мое приложение построено как приложение x64.После перехода на VS2010 я получил некоторые проблемы , которые, по-видимому, связаны с некоторым несоответствием x64 / x86 в указанных библиотекахТеперь я перехожу к цели .NET4, и у меня появляется еще больше подобных проблем .

Мой вопрос: какие меры предосторожности мне необходимо предпринять в отношении смешивания x64 и x86.Можно ли это сделать вообще?Я думал, что приложения x64 должны иметь возможность использовать dll x86 без проблем.Нет?А как насчет другого пути?Может ли приложение x86 ссылаться на dll x64 - если оно выполняется на платформе x64?Какие подводные камни мне нужно знать?

Ответы [ 2 ]

34 голосов
/ 23 апреля 2010

Нет, 64-разрядный процесс может загружать только 64-разрядные библиотеки DLL, а 32-разрядный процесс может загружать только 32-разрядные библиотеки DLL. Вероятно, вы думаете о том, что 64-битная операционная система может запускать 32-битные процессы .

Основная проблема с .NET заключается в том, что - до VS2010 - исполняемые проекты по умолчанию имеют значение «AnyCPU», что означает, что он будет загружаться в «родном» формате ОС, на которой работает (например, 32-битная для 32-битных версий). Windows и 64-разрядные для 64-разрядных версий Windows). Проблема в том, что если вы тестировали свое приложение на 32-битной Windows (скажем), оно могло сломаться, если вы загрузили 32-битные DLL и попытались запустить на 64-битной Windows.

В VS2010 по умолчанию все исполняемые проекты по умолчанию были "x86" (то есть 32-разрядными), что (по большей части) устраняет проблему.

5 голосов
/ 23 апреля 2010

Вы можете запускать приложения x86 на 64-битной ОС, используя эмуляцию WOW32.Некоторые подводные камни, с которыми я столкнулся - вы не можете смешивать и сочетать 32/64 в одном процессе.Поэтому, если вы собираетесь запустить IIS как 64, все сборки должны быть 64, в противном случае вам придется работать в 32-битном режиме.64 бит помогает некоторым приложениям больше, чем другим.Запуск 64-разрядной версии SQL Server обеспечивает ряд преимуществ по сравнению с 32-разрядной версией, самое большое преимущество в том, что вы можете установить более 4 ГБ памяти на целевом сервере и SQL сможет использовать более 4 ГБ памяти.Это не приносит пользы IIS, так как IIS обычно не может использовать более 3 ГБ памяти.Мой совет - убедиться, что ваш сервер SQL / os / версия 64, если это возможно.Это не собирается делать.Огромная разница, если на других серверах установлено 64 сервера, но обычно с ними проще работать и найти 32-разрядные версии.

...