2012-02-09 25 views

Respuesta

7

This article contiene una breve descripción de cada opción.

He aquí una pequeña cita:

La configuración por defecto, cualquiera de las CPU, significa que el montaje se ejecuta de forma nativa en la CPU es que se están ejecutando en. Es decir, ejecutará como 64 bits en una máquina de 64 bits y 32 bits en una máquina de 32 bits. Si se llama al ensamblaje desde una aplicación de 64 bits, funcionará como un ensamblaje de de 64 bits y así sucesivamente.

Si el proyecto está configurado en x86, significa que el proyecto está destinado a ejecutarse solo como un proceso de 32 bits. Un proceso de 64 bits no podrá llamar al en un ensamblaje configurado como X86. Las razones para configurar su proyecto como x86 incluyen dependencias sobre archivos DLL nativos que solo están disponibles en de 32 bits o realizan llamadas nativas asumiendo 32 bits. Las aplicaciones y los ensamblajes marcados para x86 aún se pueden ejecutar en Windows de 64 bits. Sin embargo, se ejecutan en WOW64. Visual Studio se ejecuta en este modo de emulación ya que es una aplicación de 32 bits.

Establecer el proyecto en x64 especificará que el ensamblado debe ejecutarse en Windows de 64 bits. Intentar ejecutar el ensamblado en 32 bits Windows o llamar al ensamblado desde un proceso de 32 bits dará como resultado un error de tiempo de ejecución de .

+0

¿Cómo se puede determinar si las DLL solo están disponibles en 32 bits? Además, ¿cómo se puede saber si el programa está haciendo llamadas nativas asumiendo 32 bits? –

+0

@DanW, sugiero publicar una pregunta. Hacer una pregunta así en los comentarios no te llevará muy lejos. –

+0

Simplemente es más conveniente tenerlo aquí si otros también encuentran este problema. De todos modos, creo que [esto] (http://stackoverflow.com/a/2418287/848344) hará el truco. –

4

En términos generales, se debe utilizar AnyCpu todo el tiempo.

Si tiene razones específicas para esperar problemas de compatibilidad con eso, entonces tendrá que elegir x86 o x64 según corresponda.

Como se señala en los comentarios, el dll construido contra arquitecturas específicas puede requerir que construya su ensamblaje de cierta manera. Esto será algo que querrá hacer cuando necesite, de lo contrario.

+0

cuando estoy usando el bloqueo de la aplicación AnyCpu por algún motivo. La opción x86 funciona ... probablemente esto se debe al dll usado ... – javapowered

+1

Sí, algunos controladores 'OleDb' y' ODBC', por ejemplo, funcionan solo en modo x86. –

+0

@javapowered Sí, si su DLL es específicamente x86 o x64, use el correspondiente. Por ejemplo, estaba usando una DLL de acceso a Oracle DB que era x86 y estoy obligado a compilar en el x86. –

2

No ... la máquina en la que escribe su código/compila/construye su software (EXE, DLL ...) no tiene nada que ver con la pregunta qué destino (x86/x64/Any).

SI desea que el resultado de la compilación se ejecute en cualquier lugar, utilice x86 o AnyCPU. Si desea que el resultado se ejecute en x64 solo entonces usa x64.

Existen algunos casos en los que debe usar x86 o x64, es decir, cuando utiliza algún componente (parte?)/Biblioteca/DLL/ActiveX etc. en su proyecto que solo tiene 32 Bit (luego x86) o solo 64 bits solamente (luego x64).

1

AnyCPU es lo que generalmente recomiendo. Puede ver este problema discutido en profundidad en this SO post.

La única preocupación es que no se puede retroceder: no se puede usar un ensamblaje x64 desde una aplicación x86. AnyCPU alivia este peligro potencial.

Cuestiones relacionadas