¿Qué significa el objetivo "Cualquier CPU" de Visual Studio?

Resuelto galets asked hace 15 años • 8 respuestas

Tengo cierta confusión relacionada con las opciones de compilación de la plataforma .NET en Visual Studio 2008.

¿Cuál es el objetivo de compilación "Cualquier CPU" y qué tipo de archivos genera? Examiné el ejecutable de salida de esta compilación "Cualquier CPU" y descubrí que son los ejecutables x86 (¡quién no lo vería venir!). Entonces, ¿hay alguna diferencia entre apuntar a ejecutables a x86 y "cualquier CPU"?

Otra cosa que noté es que los proyectos administrados de C++ no tienen esta plataforma como opción. ¿Porqué es eso? ¿Eso significa que mi sospecha de que los ejecutables de "Cualquier CPU" sean simples de 32 bits es correcta?

galets avatar Feb 05 '09 23:02 galets
Aceptado

Un ensamblado AnyCPU realizará JIT a código de 64 bits cuando se cargue en un proceso de 64 bits y de 32 bits cuando se cargue en un proceso de 32 bits.

Al limitar la CPU, estaría diciendo: el ensamblaje está utilizando algo (algo probablemente no administrado) que requiere 32 bits o 64 bits.

AnthonyWJones avatar Feb 05 '2009 16:02 AnthonyWJones

Creo que ya se ha dicho la mayoría de las cosas importantes, pero pensé en agregar una cosa: si compila como cualquier CPU y lo ejecuta en una plataforma x64, no podrá cargar archivos DLL de 32 bits. porque su aplicación no se inició en WoW64 , pero esos archivos DLL deben ejecutarse allí.

Si compila como x86, el sistema x64 ejecutará su aplicación en WoW64 y podrá cargar archivos DLL de 32 bits.

Entonces creo que deberías elegir "Cualquier CPU" si tus dependencias pueden ejecutarse en cualquier entorno, pero elegir x86 si tienes dependencias de 32 bits. Este artículo de Microsoft explica esto un poco:

/CLRIMAGTYPE (especificar tipo de imagen CLR)

Por cierto, esta otra documentación de Microsoft coincide en que x86 suele ser una opción más portátil:

Elegir x86 es generalmente la configuración más segura para un paquete de aplicación, ya que se ejecutará en casi todos los dispositivos. En algunos dispositivos, no se ejecutará un paquete de aplicación con la configuración x86, como Xbox o algunos dispositivos IoT Core. Sin embargo, para una PC, un paquete x86 es la opción más segura y tiene el mayor alcance para la implementación de dispositivos. Una parte sustancial de los dispositivos con Windows 10 continúan ejecutando la versión x86 de Windows.

Paul A Jungwirth avatar Jan 23 '2010 18:01 Paul A Jungwirth

Crédito al libro "CLR vía C#" , vea esto:

Ingrese la descripción de la imagen aquí

Ivan avatar Jan 20 '2017 14:01 Ivan

A continuación se ofrece una descripción general rápida que explica los diferentes objetivos de compilación.

Según mi propia experiencia, si está buscando crear un proyecto que se ejecute en plataformas x86 y x64, y no tiene ninguna optimización x64 específica, cambiaría la compilación para que diga específicamente "x86".

La razón de esto es que a veces puedes obtener algunos archivos DLL que chocan o algún código que termina fallando en WoW en el entorno x64. Al especificar específicamente x86, el sistema operativo x64 tratará la aplicación como una aplicación x86 pura y se asegurará de que todo funcione sin problemas.

Dillie-O avatar Feb 05 '2009 16:02 Dillie-O