martes, 19 de febrero de 2019

No se puede cargar el archivo o ensamblado 'Oracle.DataAccess' ni una de sus dependencias. Se ha intentado cargar un programa con un formato incorrecto.

Todo iba bien cuando vivíamos en un mundo donde solo existía en el desarrollo 32bits, pero una vez apareció 64bits nos dió algunos dolores de cabeza sobre todo en temas de conexión a base de datos Oracle.

Tenia una aplicación realizada en ASP la cual funcionaba con VS 2008 luego la migre a 2010 hasta que la pase 2012 y hasta ahí la deje. No me presentaba problemas con el cliente de Oracle 11.1.0.2G para 32bits pero cuando quise actualizar a 12.2.0.1 C para 64 bits se volvió un dolor de cabeza que corriera con VS ya que siempre se presentaba el error:
No se puede cargar el archivo o ensamblado 'Oracle.DataAccess' ni una de sus dependencias. Se ha intentado cargar un programa con un formato incorrecto.

Seguí los paso recomendados en el Oracle Suport para la instalación y configuración del ODAC64 en VS  ASP agregarlos en el proyecto como referencia y establecer el proyecto de AnyCpu a x64.


Aunque se siguió todos los pasos recomendados, esto no funcionaba y seguía dando el mismo error.

Después de indagar, investigar y probar mucho me percate de una particularidad del VS2012 y es que el IIS Express funciona a 32bits, esto quería decir que jamas de los jamases me iba a funcionar la conexión con el Oracle.DataAccess.dll de 64bits. Y entonces, de que me sirve establecer el AnyCpu o x64? bueno eso solo sirve ara la compilación y generacion de los archivos binarios y empaquetados Dll por ello en la compilación no da error sino en la ejecución por que el IIS Express al ejecutar en 32bits SOLO va a ejecutar referencias que funcionen a 32bits!!!.

Y ahora que hacemos ? Instalamos un Visual Studio para 64 bits? bueno, pues eso sería lo lógico pero no existe un VS para 64bits.  Y ahora? bueno para este tipo de inconvenientes de plataformas web de 64bits Microsoft incluyó desde la versión VS2013 la opción de ejecutar los proyectos web en plataforma IIS de 64bits.  En Herramientas\Opciones\Proyectos y Soluciones\Proyectos Web activa el casillero Usa version de 64bits para IIS Express.


Bueno, esta solucionado para los que tiene VS2013 y superior.  Y los que tenemos VS2012 que hacemos?
Bueno, también lo podemos hacer que ejecute el IIS Express a 64bits pero es un poco mas complicado ya que tenemos que tenemos que hacerlo desde el regedit.

Ejecutamos el regedit, vamos a la ruta HKEY_CU\SOFTWARE\Microsotf\VisualStudio\11.0\WebProjects, aqui agregamos un nuevo valor DWORD Use64BitIISExpress con valor 1, esto hará que por defectos el IIS Express del VS2012 funcione a 64bits.


Y listo, reiniciamos el VS2012 para que cargue con la nueva configuración y ejecute el IIS Express ejecute a 64bits y asi funcione nuestra conexión Oracle 12c con Oracle.DataAccess.dll de 64bits.

Nota: Una vez configurado el IIS para 64bits los proyectos web de 32bits no funcionaran. Tendran que dejar la configuración original.