2009-01-29 60 views
5

我有一個應用程序在.exe文件所在的目錄下使用了ODAC 11的本地版本。這個想法是我們希望我們的應用程序使用本地ODAC 11,而不管用戶在她的機器上安裝了什麼。爲什麼ODP.NET 11 xcopy部署在裝有Oracle DB 10的機器上工作?

Oracle.DataAccess.dll與.exe位於同一目錄中。

它正常工作時,客戶機沒有安裝Oracle客戶端,但在Oracle數據庫10.2.0.something安裝啓動它時,一臺機器上我得到一個錯誤:

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() 

我猜這與運行時綁定策略有關,但在Google上搜索「Oracle/ODAC/ODP.NET運行時綁定策略」並沒有發現任何有用的東西。

有誰知道如何解決這個問題?

如果不是這個特定的問題,有人能指向我如何做我想做的事情的概述:確保我的應用程序使用ODAC 11無論是什麼?

回答

4

因此,據我所知,問題是,雖然Oracle.DataAccess.dll與應用程序位於同一目錄中,但無法找到其較低級別的同類(oci,et al),因此出現兼容性錯誤。

事實證明,如果你想要一個應用程序與ODAC工作,無論什麼其他用戶可能她的機器上安裝了11 Xcopy部署,你需要做兩件事情:

  1. 設置PATH環境變量爲過程。 (我已經這樣做了。)
  2. 設置進程的ORACLE_HOME環境變量。 (我沒有做這個。)

    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); 
    

編輯:同樣重要的是要注意,甲骨文將拋出這個錯誤不僅僅是環境問題,也是如果文件之一是對失蹤目標機器。儘管有環境設置,但我在其他計算機上也出現了相同的錯誤,因爲我將Subversion設置爲忽略名爲「bin」的目錄,因此OraOps DLL未被複制到客戶端。

0

如果您使用的是oracle客戶端10.2.0.1或10.2.0.2,則Oracle註釋215255.1指示如果應用patchset 10.2.0.3它將修復此問題。獲取10.2.0.3數據庫補丁(852MB)並將客戶端修補回家。是的,這是完整的數據庫服務器補丁集,但它也適用於客戶端。

2

您希望強制您的ODP.NET驅動程序使用本地文件夾中的oci.dll副本,而不是已安裝的副本。

您可以通過

  • 強制此設置PATH變量,以便系統發現的OCI.DLL首先你的副本(如由Josh Kodroff答案)

  • 您可以使用ODP。在app.config(或web.config)中的NET配置部分顯式設置「DllPath」的值。

有關詳細信息,請參閱http://ora-00001.blogspot.com/2010/01/odpnet-minimal-non-intrusive-install.htmlhttp://database.in2p3.fr/doc/oracle/Oracle_Database_11_Release_1_(11.1)_Documentation/win.111/e10927/featConfig.htm

4

題爲「部署ODP.NET與Oracle即時客戶端」的文章在http://alderprogs.blogspot.com/2009/04/deploying-odpnet-with-oracle-instant.html發現了什麼是我關於如何提供一個精簡的xcopy最好的解釋用你的應用程序進行類型部署只需要5個Oracle DLL即可獲得支持。

這表示ObiWanKenobi和Josh Kodroff的答案提供了與我的經驗相符的重要附加信息。

加入時間:http://www.brothersincode.com/post/Oracle-ODPnet-xcopy-deployment-for-aspnet.aspx

相關問題