2014-01-15 51 views
0

不同的我已經在我的web.config文件獲取web.config中指定ODP.net的版本,這是從已安裝的版本

<DbProviderFactories> 
     <remove invariant ="Oracle.DataAccess.Client" /> 
     <add name="ODP.NET, Unmanaged Driver" 
      invariant="Oracle.DataAccess.Client" 
      description="Oracle Data Provider for .NET, Unmanaged Driver" 
      type="Oracle.DataAccess.Client.OracleClientFactory, 
      Oracle.DataAccess, Version=4.121.1.0, Culture=neutral, 
      PublicKeyToken=89b483f429c47342" /> 
    </DbProviderFactories> 

我的開發機器使用OPD.net版本4.121.1.0,我以下已經添加了對該文件的引用並指定它應該在本地複製。我的部署服務器有一個較舊的客戶端10.2.0.100,位於D:\ oracle \ product \ 10.2.0 \ db_1 \ BIN中。由於此應用程序將部署到多個服務器配置,因此我不想管理每個服務器的Oracle客戶端。我認爲,通過增加

<remove invariant ="Oracle.DataAccess.Client" />

我會刪除與其他版本的任何衝突,除了我得到...

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

看完後,似乎有可能能夠只使用在我的web.config的上面幾行,並指定我想使用哪個版本的ODP.net,但它不適用於我。我正在尋找可能,這是做這件事的正確方法嗎?

謝謝。任何幫助是極大的讚賞。

回答

1

「非託管」提供程序由兩部分組成:有管理的驅動程序 - Oracle.DataAccess.dll和非託管客戶端(通常稱爲「Oracle Home」)。雖然我猜想可能會有一些不匹配,但您要求11g驅動程序與10g客戶端進行通信,而我認爲10g甚至不支持.net 4.0(這是您加載的驅動程序)。如果您想使用.net 4.0和非託管提供程序,您可能別無選擇,只能更新您的服務器。

也就是說,如果服務器依賴性是一個問題,我只會使用managed provider。非託管提供商是一個由幾十年前無人管理的dll(Oracle客戶端)管理的.net程序集的大雜燴。受管理的提供者是全新的,從頭開始的界面,最終放棄了對客戶端的舊依賴關係,真正讓您只需放入幾個DLL即可運行。

+0

謝謝b_levitt。鏈接中的視頻以及您的摘要最有用。我發現在bin目錄中包含tnsnames.ora文件並不夠,但我需要創建一個tnsnames.ora-less配置。即數據源=(描述=(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = myhost)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl))); User Id = oracle_user;密碼= oracle_pwd;「作爲我的連接字符串的一部分,目前我已經在兩個不同的系統上進行了測試,並且兩者都起作用 – Trebor

+1

非常感謝您的支持我在tnsnames上找到了有趣的小技巧: 注意:默認的ODAC GUI安裝程序在machine.config文件中創建TNS_ADMIN屬性,該屬性將覆蓋位於應用程序工作目錄中的tnsnames.ora文件的使用情況,在繼續執行此OBE之前,我們建議您在machine.config文件中註釋掉該屬性。 來自:http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/appdev/dotnet/Web_version_Fully_Managed_ODPnet_OBE/odpnetmngdrv.html –

+0

好像Oracle不夠複雜,他們不得不添加另一個晦澀的「功能」。謝謝你的提醒。幸運的是,我只在我的開發機器上使用Easy Client,而不需要他們的GUI工具。 – Trebor

1

我不熟悉ODP.net或Oracle。我想你最終引用的是一個dll或者一堆dll文件。問題是你的代碼從錯誤的位置獲取引用,並且你想明確地指定它。我以前做過,和其他dll一樣。這是dll通過安裝程序導入GAC時的常見情況,它們是由visual studio自動發現的。

你沒有描述你的Visual Studio解決方案結構,但我想問題在於你的參考。如果您的引用是正確的,則不必覆蓋任何web.config設置。我會有這樣的結構:

solution folder 
     ------> lib 
     ------> project1 
     ------> project2 

其中lib文件夾將包含所有我的dll不在.NET核心。然後,我會刪除並添加所有項目引用以查看特定的文件夾dll。 This post可以指導你如何使用顯式路徑設置引用(在我的例子中是lib文件夾)。

希望我幫了忙!

+0

Pantelis,謝謝。這幾乎就是發生了什麼事情。但是,有問題的DLL與調用它的可執行文件一起放入/ bin目錄。我只是試過你的解決方案,但結果相同。根據MSDN文章「如果您使用不在項目目錄中的程序集,您可以在參考路徑中指定其位置」。我只是指定「bin」而沒有任何斜線。當我嘗試運行該程序時,它聲明「Oracle.DataAccess.Client.OracleConnection的類型初始值設定項」引發了一個異常「 – Trebor

相關問題