2010-09-21 26 views
0

我有一個使用Oracle客戶端(特別是Oracle.DataAccess)的小型命令行應用程序。我的開發計算機上安裝了2.11.7.20版本,但應用程序最終將運行的服務器版本爲2.11.7.0。當我嘗試在服務器上運行應用程序時,它失敗,說明它無法找到dll或它的一個依賴項(找到的程序集清單定義與程序集引用不匹配)。Oracle客戶端版本的小變化導致應用程序失敗

我將Oracle.DataAccess.dll從服務器複製到我的機器上,改爲將項目改爲引用它,然後重新編譯。它現在在服務器上正常運行。

但是,必須有一種更簡潔的方法來處理這類版本問題,尤其是像x.x.x.0到x.x.x.20這樣小的版本。我一直在ASP.NET中進行開發多年,您可以在web.config中更改對程序集的引用以解決類似的問題,但這是我的第一個「桌面」應用程序,不知道該怎麼做。我試圖在Visual Studio的屬性中爲引用程序集設置「特定版本」爲false,但它似乎沒有做任何事情。我也嘗試添加一個assemblyBinding到app.config文件,但是這導致應用程序立即崩潰。

<runtime>  
    <assemblyBinding> 
    <dependentAssembly> 
     <assemblyIdentity name="Oracle.DataAccess" 
           publicKeyToken="89b483f429c47342" /> 
     <bindingRedirect oldVersion="2.111.7.20" 
          newVersion="2.111.7.0"/> 
    </dependentAssembly>   
    </assemblyBinding> 
</runtime> 

編輯:哦,我把運行時間段作爲app.config而不是configSections的第一個塊。該應用程序不再崩潰,但我仍然得到相同的錯誤。

回答

0

D'oh再次。我離開了assemblyBinding的xmlns;當我穿上它時,一切都很完美。所以...你可以使用bindingRedirect以版本方式倒退。

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Oracle.DataAccess" 
          publicKeyToken="89b483f429c47342" culture="neutral" /> 
     <bindingRedirect oldVersion="2.111.7.20" 
         newVersion="2.111.7.0"/> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
0

web.config的等效桌面是App.config(它將自動複製到您的輸出文件夾並重命名爲.config)。所以你可以把它放在你的項目中的App.config中(如果它有幫助的話)(你可能需要首先將這個文件添加到你的項目中)。

+0

「我也嘗試在app.config文件中添加一個assemblyBinding,但這導致應用程序立即崩潰。」 – 2010-09-21 15:28:22

0

Oracle客戶端是一個很大的痛苦!

您是否看過備用Oracle提供商,如devArt's dotConnect?這個驅動程序,例如, 是100%託管代碼,支持許多高級Oracle功能,提供實體框架支持(在ODP.NET中有一天我會確定)。

+0

我與一家政府機構訂立了六個月的合同,不會發生。我想念SQL Server: -/ – 2010-09-21 15:36:44

+0

@pjabbott,那麼我認爲設置assemblyBinding是你最好的選擇。 – 2010-09-21 16:20:07

0

我在here上提供了一些細節;讓我知道它是否有幫助,或者您需要更多信息。

相關問題