2010-03-12 111 views
38

我工作的代碼庫是.NET 2.0。對於我們新的程序集/ DLL/Web應用程序,我很想利用3.5所提供的優勢。您可以在解決方案中混用.NET框架版本嗎?

可以在解決方案中混合使用.NET框架(每個程序集)嗎?有沒有任何IIS相關的警告呢?

我很樂意聽到任何正面/負面/如何反饋。讓我知道!

謝謝!

回答

18

是,你可以在Visual Studio中做到這一點,它被稱爲多目標

斯科特·格思裏對Multi-Targeting Support in Visual Studio一個偉大的博客條目。

VS 2008是 的Visual Studio的第一個版本,其中包括了.NET 多目標的支持。 這是什麼意思是,你可以使用 VS 2008創建和編輯不僅 .NET 3.5的項目,也是.NET 3.0 和.NET 2.0的項目也是如此。這 允許開發更快速 升級和利用新的 的Visual Studio工具特性 - 而不必一定要求 被安裝在客戶端上運行他們的應用程序 生產 服務器 .NET的新版本。

乾杯

+0

如果您想不改動舊項目,那麼您可以在單個解決方案中將3.5程序集/項目放在一起。就IIS而言,您只需要在服務器上安裝3.5框架(還有一個3.5 Service Pack 1)。 2.0,3.0和3.5框架可以同時安裝,沒有任何問題。 – intoOrbit 2010-03-12 14:09:59

+1

這就是我喜歡stackoverflow的原因。感謝您的鏈接和解釋! – Micah 2010-03-12 15:30:32

+11

不錯,回答,但這不是海報問的問題 - 他們詢問在**相同的程序集中使用多個版本的.Net框架** – Justin 2010-03-12 15:43:15

3

編輯:我錯了,你可以。你可以參考3. + 2.0中的程序集,因爲CLR是一樣的。因爲有新版本的CLR,所以從2.0/3. +到4.0時不會出現這種情況。

http://abdullin.com/how-to-use-net-35-syntax-and-compiler-features-for-net-20/

+0

據我所見,這是完全可能的另一種方式,但在2.0項目中添加對3.5項目的引用時會出現警告。另外,引用的3.5代碼可能會導致錯誤,但我不確定。 – Webleeuw 2010-03-12 13:56:29

+0

這不完全正確。 2.0,3.0和3.5都在相同的2.0 CLR上運行。 (忽略服務包等)。從2.0代碼中使用3.5程序集是完全可能的,前提是您不依賴於任何Service Pack更改。你可以直接在Visual Studio中做,它只是給你一個警告。我懷疑它是正式支持,但它的工作原理,甚至可以做像Linq 2.0這樣的東西,只要你手動找到並引用所需的程序集。 – 2010-03-12 14:02:17

+0

是的,那對我來說很愚蠢。我正在考慮從1.0到2.0。 – kemiller2002 2010-03-12 14:05:04

3

如果你能等待新的.NET 4.0框架,你將能夠並排在同一進程中運行DLL的每個版本的一面。

+2

這並不是他所問的。 3.5和2.0都運行在2.0 CLR上,因此不需要並排CLR加載。 – 2010-03-12 14:05:40

+1

@hambonious,聽起來不錯,它似乎工作,但只是爲了安全起見,你有一個MSDN鏈接,它記錄了這個功能是有保證的嗎? – RenniePet 2011-07-17 14:24:21

+0

沒關係,我想我已經找到了相關文檔:http://msdn.microsoft.com/en-us/library/ff602939.aspx – RenniePet 2011-07-17 20:51:28

2

這應該不是問題。 .NET 2.0 RTM到.NET 3.5 SP2都使用完全相同的CLR版本。它們僅僅因包含的程序集數量而異。彙編格式是相同的。當然,如果您確實利用僅包含在.NET 3.5中的程序集,則必須確保目標機器上實際安裝了3.5。如果不是,你會很快發現。

3.5應該已經是在機器上是否已經啓用了Windows更新。如果不是,需要十幾分鍾才能完成。

2

作爲一個側面說明,我們有我們在2.0中使用,並且仍然在3.5使用,而無需重新編譯一些舊的1.0庫。所以這裏有一些向後兼容的功能。

+0

而在4.0中,沒有重新編譯......我的時間是如何進行的。 – quillbreaker 2012-10-23 17:38:52

1

你不能有NET 1.1 assmeblies在同一個進程中運行作爲.NET 2.0 +組件 - 試圖這樣做會產生故障。

對於IIS,這意味着您不能在.Net 2.0及以上站點的同一應用程序池中運行.Net 1.1站點/虛擬目錄 - 您需要創建一個單獨的應用程序池以保持.Net 1 。1代碼在不同的進程中運行。 (這隻能在IIS 6.0及更高版本中完成,即不能在Windows XP中完成)

但是,正如nobugz所說 - .Net 2.0到.Net 3.5都使用相同的CLR,因此不同版本的.Net代碼可以在同一個程序集中不用擔心 - 這也適用於IIS(.Net 2.0和.Net 3.5代碼可以愉快地共存於同一個應用程序池中)

+0

「你不能在.Net 2.0+程序集的相同進程中運行.net 1.1 assmeblies」 - 是的,你可以 - 只要你使用的是.NET 2.0 CLR。 – Joe 2012-05-21 15:41:07

相關問題