2012-05-18 9 views
11

Recentemente ho iniziato i test su un C# (4,0) applicazione che utilizza ODP.NET (Oracle.DataAccess 4.112.3)C# file di ODP.NET di carico o di montaggio

ho impostato questo progetto di indirizzare qualsiasi piattaforma e pubblicare il app.

Quando eseguo il programma sulla macchina client ricevo:

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. 

Come ho detto che ho scelto come destinazione 'Qualsiasi CPU' e ho anche integrato l'assemblea Oracle.DataAccess con l'applicazione.
Viene visualizzato questo errore su macchine su cui è installato il client Oracle e macchine che non lo fanno.

Qualsiasi aiuto è apprezzato.

+0

Tu hai modificato 'Copia locale' su Vero sulle proprietà del riferimento Oracle diritto? – carny666

risposta

18

Come ho detto che ho scelto come destinazione 'Qualsiasi CPU'

Questo è probabilmente il problema.

Oracle.DataAccess ha versioni separate per i sistemi 32bit e 64bit. Se si sta sviluppando su una macchina a 32 bit e quindi si esegue la distribuzione su un sistema operativo a 64 bit, si riceverà questo messaggio.

Si potrebbe facilmente aggirare questo costruendo l'applicazione su target x86 e distribuendo la versione a 32 bit dei componenti di accesso ai dati.

+0

è stato così, grazie mille per l'aiuto rapido! – Wjdavis5

+1

Per le applicazioni Web, ciò significa che il pool di applicazioni deve essere eseguito a 32 bit e che è richiesto il client Oracle a 32 bit. Qual è la soluzione per server Web a 64 bit e client Oracle, quando si utilizza '4.112.3'? Copia locale è a 32 bit. Boom. Senza di esso, viene utilizzata la copia di GAC'd del client '4.112.2'. Boom. La copia della nuova versione a 64 bit in bin esplode dicendo che alla sua factory provider manca un'interfaccia. Sta cercando di utilizzare nuovamente la vecchia versione di GAC_64? O manca qualcosa da 'web.config' per dirgli di usare il nuovo provider nella copia' bin'? –

+0

Grazie, questo ha risolto il mio problema. :) – Pirate

0

È consigliabile controllare se l'assembly Oracle.DataAccess presenta dipendenze nel computer e manca nel computer client.

4

Come ha detto Reed Copsey, esistono due DLL diverse. Quando scegli come target ANYCpu, la tua app verrà eseguita a 64 bit su una macchina a 64 bit e 32 bit su una macchina a 32 bit. Pertanto, se si desidera che l'app funzioni su 32 o 64 bit e eseguita in modalità AnyCPU, è necessario modificare il riferimento di Oracle.DataAccess a Versione specifica = falso e copiare local = false. Quando si distribuisce a un client, è avere la DLL oracle nel loro GAC e dovrebbe raccogliere automaticamente la versione corretta.

0

Da eseguire il debug di qualsiasi CPU in alto a cambiare l'optin per eseguire il debug X64, anche se internamente Eventuali punti di CPU per X64 solo, ma che non funziona, provare a cambiare per x64 e dovrebbe funzionare come un fascino

Problemi correlati