2009-01-29 16 views
5

.exe dosyasının bulunduğu dizinin altındaki ODAC 11'in yerel bir sürümünü kullanan bir uygulamam var. Fikir, uygulamanızın makineye başka hangi kullanıcı yüklendiğine bakılmaksızın yerel ODAC 11'i kullanmasını istiyoruz .Neden Oracle DB 10 ile bir makinede değil ODP.NET 11 xcopy dağıtım çalışmaları yüklü geliyor?

Oracle.DataAccess.dll, .exe ile aynı dizinde bulunur. istemci makine hiçbir Oracle istemci yüklü olduğunda

Düzgün çalışır, ancak yüklü Oracle Database 10.2.0.something bir makinede başlatırken bir hata alıyorum: Ben tahmin ediyorum

The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception. 

[Stack Trace] 

The provider is not compatible with the version of Oracle client 
OracleException 
    at Oracle.DataAccess.Client.OracleInit.Initialize() 
    at Oracle.DataAccess.Client.OracleConnection..cctor() 

Bu çalışma zamanı bağlama politikası ile ilgili bir şey vardır, ancak Google'da "Oracle/ODAC/ODP.NET çalışma zamanı politikasını bağlayıcı" kelimesini aradığınızda kullanışlı bir şey çıkmadı etmiştir.

kimse sorunun nasıl çözüleceği biliyor mu? Bu özel bir sorun değilse, birisi ne yapmak istediğimin nasıl yapılacağına dair genel bir bakış açısına işaret edebilir: Uygulamamın ODAC 11'i ne olursa olsun kullandığından emin olun.

cevap

4

Yani, mesele Oracle.DataAccess.dll uygulamayla aynı dizinde iken, onun alt düzey homies (oci, vd), dolayısıyla uyumluluk hatası bulamadı olmasıydı.

  1. Set PATH ortam değişkeni:

    Eğer 11 xcopy dağıtım, kullanıcının kendi makinede yüklü olabilir başka ne ODAC ile çalışmak için bir uygulama istiyorsanız, 2 şeyler yapmak gerektiğini çıkıyor işlem için. (Bunu zaten yapıyordum.)

  2. İşlemin ORACLE_HOME ortam değişkenini ayarlayın. (Ben bu yapmıyordum.)

    Environment.SetEnvironmentVariable("PATH", Environment.CurrentDirectory + "\\oracle\\11.1\\odac;" + Environment.CurrentDirectory + "\\oracle\\11.1\\odac\\bin;", EnvironmentVariableTarget.Process); 
    Environment.SetEnvironmentVariable("ORACLE_HOME", Environment.CurrentDirectory + "\\oracle\\11.1\\odac", EnvironmentVariableTarget.Process); 
    

DÜZENLEME: Oracle sadece çevre sorunları için değil, aynı zamanda dosyalardan biri üzerinde eksik değilse bu hatayı atar dikkat etmek de önemlidir hedef makine OraOps DLL müşteriye kopyalanan değildi bu yüzden, "bin" denilen dizinleri görmezden Subversion'ın seti vardı çünkü Çevre ayarlarına rağmen diğer makinelerde bu aynı hata var.

0

Oracle istemci 10.2.0.1 veya 10.2.0.2 kullanıyorsanız, Oracle Not 215255.1, patchset 10.2.0.3'ü uygularsanız sorunu çözdüğünü belirtir. 10.2.0.3 veritabanı yamasını (852MB) alın ve istemciyi yerleştirin. Evet, tam veritabanı sunucusu patchset, ama aynı zamanda istemci için de geçerlidir. Anladığım kadarıyla

2

ODP.NET sürücülerinizi, zaten yüklü olan yerine yerel klasörünüzdeki oci.dll dosyasının kopyasını kullanmak için zorlamak istiyorsunuz.

sistemi (Josh Kodroff tarafından cevap olduğu gibi) oci.dll ilk kopyanızı bulur böylece PATH değişkeni ayarını ya

  • bu zorlayabilir

veya

  • Eğer ODP kullanabilirsiniz."DllPath" değerini açıkça ayarlamak için app.config (veya web.config) içindeki NET yapılandırma bölümü.
  • Ayrıntılar için

, http://ora-00001.blogspot.com/2010/01/odpnet-minimal-non-intrusive-install.html ve http://database.in2p3.fr/doc/oracle/Oracle_Database_11_Release_1_(11.1)_Documentation/win.111/e10927/featConfig.htm

4

http://alderprogs.blogspot.com/2009/04/deploying-odpnet-with-oracle-instant.html bulunan "Oracle Instant Client ile dağıtma ODP.NET" başlıklı makaleye tam olmayan bir xcopy sunmak için nasıl en iyi açıklaması hakkında benim için ne verdi bkz uygulamanızla dağıtım yazın. Destek için yalnızca 5 Oracle DLL gerekli.

Bu, ObiWanKenobi ve Josh Kodroff tarafından verilen cevapların benim deneyimimle eşleşen önemli ek bilgiler sağladığını söyledi.

Buna ekleyin: http://www.brothersincode.com/post/Oracle-ODPnet-xcopy-deployment-for-aspnet.aspx

İlgili konular