2013-08-23 45 views
0

我有一個dll Oracle.DataAccess的問題:在我的工作站上我安裝了一個客戶端,並且在一些服務器上有另一個。在運行時我趕在運行時卸載並加載引用

System.TypeInitializationException: The type initializer for 
'Oracle.DataAccess.Client.OracleConnection' threw an exception. ---> 
Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client 
    at Oracle.DataAccess.Client.OracleInit.Initialize() 
    at Oracle.DataAccess.Client.OracleConnection..cctor() 
    --- End of inner exception stack trace --- 
    at Oracle.DataAccess.Client.OracleConnection..ctor(String connectionString) 

在catch子句,我想卸載當前DLL和加載其它位置(在配置文件中設置)。

可能嗎?更重要的是,這是解決這個問題的好方法嗎?

+1

你不能從AppDomain卸載DLL;你可以啓動一個完全獨立的AppDomain,但那是......「非常棘手」 –

+0

是的,這個站點因爲一個巨大的變化而變得有點黑客。你認爲我看錯了方向嗎? – Thomas

+0

選擇程序集並轉至properties-> SPECIFIC VERSION,將其設置爲false。嘗試,如果它工作 – Anand

回答

0

處理它的方法之一 - 抽象你的oracle數據訪問。創建兩個程序集,每個程序集都引用特定的ODP。確定安裝哪個客戶端或嘗試逐個加載程序集,直至成功並通過界面工作。但關鍵是,您的客戶端軟件必須只知道接口,但是您的ODP通信的實現將被抽象化。

還有這種模式 - 代理,裝飾器......你選擇