2012-05-18 41 views
11

Recientemente he empezado a probar en un C# (4.0) aplicación que utiliza ODP.NET (Oracle.DataAccess 4.112.3)archivo de C# ODP.NET carga o montaje

puse este proyecto para apuntar cualquier plataforma y publicar el aplicación

Cuando ejecuto el programa en la máquina cliente recibo:

Could not load file or assembly 'Oracle.DataAccess, Version=4.112.3.0,Culture=neutral, 
PublicKeyToken=89b483f429c47342' or one of its dependencies. An attempt was made to load 
a program with an incorrect format. 

como he dicho orientación 'Cualquier CPU' y también he incorporado El montaje Oracle.DataAccess con la aplicación.
Aparece este error en las máquinas que tienen instalado el cliente de Oracle, así como en las máquinas que no lo tienen.

Cualquier ayuda es apreciada.

+0

Tienes cambió 'Copiar local' a True en las propiedades del derecho de referencia de Oracle? – carny666

Respuesta

18

como he dicho orientación 'Cualquier CPU'

Este es probablemente el problema.

Oracle.DataAccess tiene versiones separadas para los sistemas 32bit y 64bit. Si está desarrollando en una máquina de 32 bits y luego implementando en un sistema operativo de 64 bits, recibirá este mensaje.

Podría solucionar este problema creando su aplicación para apuntar a x86 y desplegando la versión de 32 bits de los componentes de acceso a datos.

+0

eso fue todo, ¡muchas gracias por la ayuda rápida! – Wjdavis5

+1

Para las aplicaciones web, esto significa que el grupo de aplicaciones debe ejecutar 32 bits y se requiere el Oracle Client de 32 bits. ¿Cuál es la solución para el servidor web de 64 bits y el cliente Oracle, cuando se usa '4.112.3'? Copiar local es de 32 bits. Auge. Sin él, se utiliza la copia GAC ​​del cliente '4.112.2'. Auge. Al copiar una nueva versión de 64 bits, la papelera explota diciendo que a su fábrica proveedora le falta una interfaz. ¿Está intentando usar la versión anterior de GAC_64 nuevamente? ¿O falta algo de 'web.config' para decirle que use el nuevo proveedor en la copia' bin'? –

+0

Gracias, esto resolvió mi problema. :) – Pirate

0

Quizás deba comprobar si el ensamblado Oracle.DataAccess tiene alguna dependencia en su máquina y si falta en la máquina del cliente.

4

Como dijo Reed Copsey, hay dos DLL diferentes. Cuando se dirige a ANYCpu, su aplicación se ejecutará en 64 bits en una máquina de 64 bits y 32 bits en una máquina de 32 bits. Por lo tanto, si desea que su aplicación funcione en 32 o 64 bit y en modo AnyCPU, debe cambiar la referencia de Oracle.DataAccess a Specific Version = false y copiar local = false. Cuando implementa a un cliente, debe tener el dll oráculo en su GAC y debe elegir la versión correcta automágicamente.

0

De depurar cualquier CPU en la parte superior del cambio de suscripción voluntaria para depurar X64, aunque internamente si hay puntos de CPU para X64 solamente, pero eso no funciona, trate de cambiarlo para x64 y debería funcionar como un encanto