Как узнать, какой процессор использовать в сборке (x86 x64 или AnyCpu)? - PullRequest
5 голосов
/ 10 февраля 2012

Я использую Windows 7 и x64 CPU. Означает ли это, что я всегда должен компилировать с параметром "x64" в Visual Studio? Как насчет "dll", могу ли я использовать x86 dll из приложения x64? Возможно, есть другие проблемы?

Ответы [ 4 ]

7 голосов
/ 10 февраля 2012

Эта статья содержит краткий обзор каждой опции.

Вот небольшая цитата:

Настройка по умолчанию, Любой ЦП, означает, что сборкабудет работать непосредственно на процессоре, если он в настоящее время работает.Это означает, что он будет работать как 64-разрядный на 64-разрядном компьютере и 32-разрядный на 32-разрядном компьютере.Если сборка вызывается из 64-разрядного приложения, она будет работать как 64-разрядная сборка и т. Д.

Если для проекта установлено значение x86, это означает, что проект предназначен для запуска только как32-битный процесс.64-разрядный процесс не сможет вызвать сборку, установленную как X86.Причины установить ваш проект как x86 включают в себя зависимости от собственных библиотек DLL, которые доступны только в 32-битных системах или выполнение собственных вызовов в предположении 32-битных.Приложения и сборки, помеченные для x86, все еще могут работать в 64-битной Windows.Однако они работают под WOW64.Visual Studio сама работает в этом режиме эмуляции, поскольку она является 32-разрядным приложением.

Если для проекта указать x64, сборка должна выполняться в 64-разрядной Windows.Попытка запустить сборку в 32-разрядной Windows или вызвать сборку из 32-разрядного процесса приведет к ошибке времени выполнения.

4 голосов
/ 10 февраля 2012

Вообще говоря , вы должны все время использовать AnyCpu.

Если у вас есть конкретные причины ожидать от этого проблем с совместимостью, вам нужно выбрать x86 или x64в зависимости от ситуации.

Как отмечено в комментариях, dll, построенная на определенных архитектурах, может потребовать от вас сборки вашей сборки определенным образом.Это будет то, что вы захотите сделать, когда вам нужно , а не иначе.

2 голосов
/ 10 февраля 2012

Нет ... машина, на которой вы пишете свой код / ​​компилируете / собираете свое программное обеспечение (EXE, DLL ...), не имеет никакого отношения к вопросу о том, какая цель (x86 / x64 / Any).

Если вы хотите, чтобы результат сборки работал везде, где вы используете x86 или AnyCPU.Если вы хотите, чтобы результат работал только на x64, тогда вы используете x64.

В некоторых случаях вы должны использовать x86 или x64 - то есть, когда вы используете какой-либо (сторонний?) Компонент / библиотека / DLL/ ActiveX и т. Д. В вашем проекте, который только 32-битный (тогда x86) или только 64-битный (тогда x64).

1 голос
/ 10 февраля 2012

AnyCPU - это то, что я обычно рекомендую.Вы можете увидеть эту проблему, подробно обсуждаемую в этой публикации SO .

Единственная проблема заключается в том, что вы не можете вернуться назад - вы не можете использовать сборку x64 из приложения x86.AnyCPU смягчает эту потенциальную ловушку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...