Когда нацеливаться на x64 в Visual Studio - PullRequest
7 голосов
/ 08 декабря 2011

Я недавно начал новую работу, и одной из первых вещей, о которых все говорили, было «обновление» всех наших приложений .NET до x64. Сначала я думал, что это странно, так как мы все знаем, что .NET компилируется в независимый от платформы IL, и конкретный CLR выполняет код.

Глядя немного дальше, я нашел эту полезную статью и эту SO-статью , которая помогла объяснить вещи.

Так что теперь я понимаю, что IL не изменился, только метаданные, в основном говорящие о том, чтобы работать в WOW64 или нет в системе x64 (в двух словах).

Так что, если я нахожусь в системе x64, я могу указать «Любой ЦП» для естественного запуска, но не будет поддерживать 32-битные библиотеки DLL; Я могу указать "x86", который будет поддерживать 32-битные библиотеки DLL (поскольку они оба будут работать под WOW64); но когда бы я указал "x64" ? Похоже, что 64-битные библиотеки будут поддерживаться в сценарии «Любой процессор» в системе x64. Это если я хочу запретить кому-либо запускать мое приложение в 32-битной системе или обеспечить сбой при попытке загрузить 32-битные библиотеки DLL?

Мне также кажется, что вам нужно только установить его на что-то отличное от "Любой ЦП", если у вас есть какой-либо сторонний dll, о котором нужно беспокоиться в вашем проекте. Лучше ли оставить его как «Любой процессор» для любого другого проекта, не связанного с другими dll?

Если мне удастся установить целевое значение "x86" из-за того, что у меня 32-битный сторонний dll, считается ли мое приложение работающим в 64-битной, если в 64-битной системе под WOW64?

Ответы [ 2 ]

8 голосов
/ 08 декабря 2011

Да, вы должны указать, что проект должен компилироваться в x64, если вы вызываете DLL, которая сама является 64-битной (либо потому, что она является нативной, либо является управляемой DLL, которая сама вызывает 64-битную собственную DLL и т. Д.).

Аналогично для указания, что это должен быть x86, если вы имеете дело с 32-битными сторонними DLL-библиотеками;оно не будет считаться 64-битным приложением, если оно работает в 64-битной версии Windows.

Если вы просто имеете дело с чисто управляемым кодом, я бы оставил все как «любые».Я также обычно оставляю библиотеки DLL как «любые», даже если исполняемый файл будет указан как x86 или x64.

И даже если вы имеете дело с собственными dll, вы все равно сможете получитьоставьте все как есть, если вы используете PInvoke;у вас может быть две версии класса, один для x86, другой для x64, и выбрать, какой использовать во время выполнения, проверив свойство IntPtr.Size.

И, конечно, если выЕсли приложению требуется более 4 ГБ ОЗУ, и вы хотите, чтобы оно работало на 64-битной ОС, тогда вам также потребуется целевая версия x64.

2 голосов
/ 08 декабря 2011

Вы бы указали x64, если используете собственный код через COM или P / Invoke, который не имеет 32-битной версии.

...