Come posso distribuire un’applicazione .NET che utilizza ODAC senza installare l’intero componente all’utente?

Ho scritto un’applicazione C # che si collega a un database Oracle 10g. Utilizzando Oracle Data Access Component 11.2 “ODAC”, funziona perfettamente sulla mia macchina.

E ora voglio distribuire l’applicazione e installarla in un’altra “macchina pulita” che abbia solo .NET Framework! E non voglio installare l’intero componente ODAC per l’utente!

Come potrei farlo? Ho provato a includere tutti i file DLL necessari nella mia cartella bin, come:

  • oci.dll
  • Ociw32.dll
  • Oracle.DataAccess.dll
  • orannzsbb11.dll
  • oraocci11.dll
  • oraociicus11.dll
  • OraOps11w.dll
  • Msvcr71.dll

Ma ancora non ha funzionato. Cosa dovrei fare per risolvere questo problema?

Non sono sicuro che la tua preoccupazione riguardi la necessità di installare il client Oracle oltre all’installazione ODAC ~ 50 MB o solo l’ODAC standalone.

Se si tratta di dover installare il client Oracle e l’ODAC, è ansible utilizzare Oracle Instant Client ? Questo è il metodo di impronta più piccolo per l’installazione del client Oracle. Avrai anche bisogno del supplemento ODC xcopy.

Se la tua preoccupazione è solo l’installazione ODAC, non penso che ci sia un ingombro ridotto.

Non è necessario installare alcun client Oracle separatamente. Ho installato quanto segue nella stessa directory di .exe:

Oracle.DataAccess.dll oci.dll OraOps11w.dll oraociei11.dll msvcr71.dll 

Assicurati che il tuo progetto faccia riferimento allo stesso Oracle.DataAccess.dll che stai consegnando. Questo ha funzionato su un nuovo PC che non aveva mai installato i client Oracle.

Ho evitato di usare TNSNAMES.ora specificando una stringa di connessione come questa

connectionstring = Data Source = “(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST =) (PORT =))” + “(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =)))”

Se si utilizza TNSNAMES.ora, è sufficiente tagliare e incollare i dettagli della connessione in una singola stringa di linea.

vedere Qual è l’impronta minima del client richiesta per connettere C # a un database Oracle?

per maggiori informazioni.

  • ejm

Per informazioni su come ottenere le dll precedenti, vedere questo tutorial: http://begeeben.wordpress.com/2012/08/01/accessing-oracle-database-without-installing-oracle-client/

Poiché questa domanda è stata pubblicata, Oracle Managed Client è ora disponibile (fornito da Oracle). L’ho usato senza problemi. Non richiede la ricerca di DLL o configurazioni speciali. Basta aggiungere il pacchetto, modificare il file di configurazione e sei pronto. NuGet Link e un articolo di Oracle a riguardo ..

Poiché questo client è scritto interamente in codice gestito .NET, è indipendente dall’architettura e non è necessario utilizzare DLL esterne, installare un client Oracle o qualcosa del genere.

Puoi installarlo in VS usando Gestione pacchetti.

 Install-Package Oracle.ManagedDataAccess 

Ho iniziato a inserire questo nel file machine.config (anche se funzionerà anche in web.config o app.config). Ho trovato che questo aiuta a evitare conflitti con altri driver che possono essere installati:

          

Quindi per la stringa di connessione:

   
  • IPORNAMEOFHOST = Questo è l’indirizzo IP o il nome DNS del tuo server.
  • PORTNUM = Questo è il numero di porta su cui Oracle sta ascoltando. Tipicamente 1521.
  • ORACLESID = SID del database a cui stai tentando di connettersi.
  • ORACLEUSER = Il nome utente da utilizzare per la connessione.
  • ORACLEPASSWORD = La password da utilizzare per la connessione.