2013-12-12 87 views
4

我有一個Visual Studio 2010項目,並且我引用了一個指向本地版本的程序集Oracle.DataAccess.dll。如何不引用程序集的特定版本?

我的選擇「特定版本」明確設置爲false,但在應用程序構建我檢查應用程序組件,它有一個特定的參考

Oracle.DataAccess,版本= 2.112。 3.0,Culture = neutral,PublicKeyToken = 89b483f429c47342

如何不引用特定版本的程序集?

我想要依賴bin文件夾中可用的版本版本。

它目前顯然取決於應用程序的構建位置。如果我在安裝了不同版本Oracle客戶機的計算機上構建項目,則主應用程序中將包含不同的Oracle.DataAccess版本引用。

它不應該依賴於真正構建應用程序的位置。它不應該引用任何特定的版本。

回答

0

因爲您在項目中引用該.dll,所以無法避免指定版本。如果您想在不依賴版本的情況下調用.dll文件,則必須在代碼中執行此操作。請參閱this

+0

的選擇是那裏的dll參考,並說,你可以設置「特定版本」假所以這是一個Visual Studio錯誤? –

+0

你在VS的其他版本上試過這個嗎? –

6

特定版本是編譯時檢查您實際構建的版本是實際在項目/文件引用中具有的版本。

您編譯的哪個版本作爲引用程序集進入編譯的程序集元數據。這包括程序集版本號,因爲它是程序集對CLR標識的一部分。沒有包含在輸出程序集中的版本,沒有辦法引用另一個程序集。

對於您的場景,我可能會將特定版本設置爲true,因此如果我在安裝了不同版本的機器上構建它,則編譯失敗。然後我會更新項目文件,如果我想編譯一個新版本。

如果您想針對引用程序集的可能較新版本運行,那麼可以通過政策進行正確控制。要麼是Oracle提供的發佈者策略文件,要麼是通過應用配置程序集綁定重定向確定您的應用程序與新版本完全兼容。這documentation提供了一個通過配置文件重定向的例子。

0

如果將SpecificVersion設置爲false,則可以輕鬆地替換引用的程序集,它將毫無問題地工作。你提到的版本只是表示項目的版本。

您可以輕鬆地檢查此行爲。創建一個類庫項目,其中包含一個返回字符串消息的公共方法。構建它並將生成的程序集放置在您要引用它的某個文件夾中。然後創建一個控制檯項目,它將使用SpecificVersion = false和CopyLocal = true引用您的程序集,並將消息輸出到控制檯。構建它並運行。之後,在第一個項目中更改返回的字符串,更改版本,生成並替換控制檯項目可執行文件附近的程序集。再次運行,您會看到該消息已更改。

0

對於Oracle.DataAccess,情況有點特殊。查看我安裝的Oracle的截圖。數據訪問

您可以安裝verison的1.x,2.0或4.0,在這裏看到可供下載: Oracle Data Access Components (ODAC) for Windows

這也取決於你所安裝的Oracle客戶端版本。 ODP.NET版本1.x僅在Oracle 11.1之前可用。 版本1.x和2.0不是100%兼容(但它們可能在同一代碼中管理它們)。在VS中指定版本,例如2.0。在這種情況下,您的計算機上必須安裝有版本2.x.x.x,在我的情況下,它將加載2.102.2.20,在早期回答中參見策略。 如果您指定版本1.x,則版本1.x.x.x必須安裝在您的機器上。 對於4.0版,我還沒有測試。

在我開發的應用程序中,我提供了兩個不同的Setup.exe。客戶必須根據他的Oracle客戶端安裝選擇正確的設置。

Furter信息,您可以在這裏找到:ODP.NET FAQ

我安裝Oracle.DataAccess enter image description here

相關問題