2010-04-23 18 views
27

Mi aplicación está construida como una aplicación x64. Después de pasar a VS2010 obtuve some problems que parece estar relacionado con alguna discrepancia x64/x86 en dlls a los que se hace referencia. Ahora me estoy moviendo para apuntar .NET4, y recibo incluso más similar problems.¿Puede una aplicación x64 usar ensamblajes x86, y viceversa?

Mi pregunta es: ¿Qué precauciones debo tomar con respecto a la mezcla de x64 y x86? ¿Se puede hacer? Pensé que las aplicaciones x64 deberían poder usar x86 dlls sin problemas. ¿No? ¿Qué hay de la otra manera? ¿Puede una aplicación x86 hacer referencia a una x64 dll, siempre que se ejecute en una plataforma x64? ¿Cuáles son los peligros que debo tener en cuenta?

Respuesta

30

No, un proceso de 64 bits solo puede cargar archivos DLL de 64 bits y un proceso de 32 bits solo puede cargar archivos DLL de 32 bits. Lo que probablemente esté pensando es que un sistema operativo de 64 bits puede ejecutar 32 bits procesos.

El principal problema con .NET es que, antes de VS2010, los proyectos ejecutables tenían como predeterminado "AnyCPU", lo que significa que se cargaría en el formato "nativo" del SO en el que se ejecuta (así 32 bits para 32 bits versiones de Windows y de 64 bits para versiones de 64 bits de Windows). El problema con eso es que si probó su aplicación en Windows de 32 bits (por ejemplo), podría romperse si carga archivos DLL de 32 bits e intenta ejecutar Windows de 64 bits.

En VS2010, predeterminaron todos los proyectos ejecutables como "x86" (es decir, 32 bits) de forma predeterminada lo que (en su mayor parte) mitiga el problema.

+0

¡Eso es clarificador! ¡Gracias! Sí, sé que el sistema operativo de 64 bits puede ejecutar procesos de 32 bits. Y asumí el mismo principio aplicado en los procesos. Veamos si puedo arreglar mi código ahora que sé esto ... Creo que cambiaré todo a x86 .. – stiank81

5

Puede ejecutar aplicaciones x86 en un sistema operativo de 64 bits utilizando la emulación WOW32. Algunas trampas que he encontrado: no se pueden mezclar y combinar 32/64 en el mismo proceso. Por lo tanto, si tiene la intención de ejecutar IIS como 64, todos los ensamblajes deben tener 64, de lo contrario, deberá ejecutar el modo de 32 bits. 64 bit ayuda a algunas aplicaciones más que a otras. Ejecutar la versión de SQL de 64 bits ofrece varias ventajas sobre la versión de 32 bits, la mayor ventaja es que puede instalar más de 4 GB de memoria en el servidor de destino y que SQL podrá usar más de 4 GB de memoria. No beneficia tanto a IIS porque IIS generalmente no puede usar más de 3 gb de memoria. Mi consejo sería asegurarme de que su servidor SQL/os/versión sea 64 si es posible. No va a hacer un. Gran diferencia si los otros servidores tienen 64 pero normalmente es más fácil trabajar con ellos y encontrar versiones de 32 bits.

+0

No es realmente lo que pregunté, pero útil de todos modos. ¡Gracias! – stiank81

Cuestiones relacionadas