在這一篇,將會從起源,介紹.Net Framework作為開始。
先了解.Net Framework到底包含了什麼,再來介紹一下版本和Runtime之間的關係,最後在介紹一下CLR如何和C#搭配然後整個run起來。
這篇結束之後,會對於整個.Net Framework有個基本的概念並且方便之後和.Net Core和Xamarin做個比對。
.Net Framework組成
基本上.Net Framework提供了3個重要功能:
- 編譯/建制程式碼的工具
- 這個包含工具像是
csc.exe
(用來編譯C#的編譯器 後面提到C#會在更深入介紹)等用來建制專案用的工具。 - Base Class Library (BCL)
- 由framework提供的library,包含一些常見的像是
System.IO
等等的方法。依照版本不同也會提供不同功能,因此組成不同的Workload。 - Common Language Runtime (CLR)
- 用來執行編譯出來的dll或者exe
一般來說,當提到.Net Framework版本的時候,其實指的都是Runtime
。
.Net Framework安裝位置和內容
基本上在安裝.Net Framework的時候就是更新BCL和CLR,而大版號的CLR 1臺電腦只能夠裝3個版本:
- CLR 1
- CLR 2
- CLR 4
基本上應該沒有人在用CLR 1,大家應該都在CLR 4,而只能有一個大版號的意思是,假設有臺電腦裝的是4.5.2
,如果他更新4.6.1
,那麼這台電腦只剩下4.6.1
。沒辦法 4.5.2和4.6.1並存
.Net Framework的安裝路徑在%WINDIR%\Microsoft.NET\Framework
,不過實際那個CLR版本有裝要看註冊表(regedit)(詳細請參考: .NET Framework Versions and Dependencies)
.Net Framework版本組成
了解了.Net Framework包含了什麼之後,接下來了解一下當提到XXX版本的時候,到底指的是什麼?
還記得上面提到.Net Framework的版本指的是Runtime
(CLR+BCL),所以有些版本更新的是BCL但是CLR
沒有大版本更新。因為這樣很容易造成 版本混搖的情況 - 舉例來說 初學者很容易以為有3.5版本的CLR。
版號相關資訊請參考:
Version number | CLR version | Release date | Support ended | Development tool | Included in | Replaces | |
---|---|---|---|---|---|---|---|
Windows | Windows Server | ||||||
1.0 | 1.0 | 2002-02-13 | 2009-07-14[22] | Visual Studio .NET[23] | XP[a] | N/A | N/A |
1.1 | 1.1 | 2003-04-24 | Visual Studio .NET 2003[23] | N/A | 2003 | 1.0[24] | |
2.0 | 2.0 | 2005-11-07 | 2011-07-12[22] | Visual Studio 2005[25] | N/A | 2003, 2003 R2,[26] 2008 SP2, 2008 R2 SP1 | N/A |
3.0 | 2.0 | 2006-11-06 | 2011-07-12[22] | Expression Blend[27][b] | Vista | 2008 SP2, 2008 R2 SP1 | 2.0 |
3.5 | 2.0 | 2007-11-19 | 2011-07-12[22] (except 3.5 SP1) | Visual Studio 2008[28] | 7, 8[c], 8.1[c], 10[c] | 2008 R2 SP1 | 2.0, 3.0 |
4.0 | 4 | 2010-04-12 | 2016-01-12[29] | Visual Studio 2010[30] | N/A | N/A | N/A |
4.5 | 4 | 2012-08-15 | 2016-01-12[29] | Visual Studio 2012[31] | 8 | 2012 | 4.0 |
4.5.1 | 4 | 2013-10-17 | 2016-01-12[29] | Visual Studio 2013[32] | 8.1 | 2012 R2 | 4.0, 4.5 |
4.5.2 | 4 | 2014-05-05 | N/A | N/A | N/A | N/A | 4.0–4.5.1 |
4.6 | 4 | 2015-07-20 | N/A | Visual Studio 2015[33] | 10 | N/A | 4.0–4.5.2 |
4.6.1 | 4 | 2015-11-30[34] | N/A | Visual Studio 2015 Update 1 | 10 v1511 | N/A | 4.0–4.6 |
4.6.2 | 4 | 2016-08-02[35] | N/A | 10 v1607 | 2016 | 4.0–4.6.1 | |
4.7 | 4 | 2017-04-05[36] | N/A | Visual Studio 2017 | 10 v1703 | N/A | 4.0–4.6.2 |
- Framework版本號和CLR版本號不一樣
- 因此不了解的很容易以為有CLR 3.5
- 只有CLR 2.0的電腦可以用LINQ
曾經有一些舊案,無法升級.Net Framework,所以無法用LINQ。(還怎麼寫code,沒LINQ等於沒了google的工程師)
解決方式是另開一個LIbrary target .Net Framework 3.5並且用LINQ,main使用這個lib run起來不會有問題。原因是底層用的是CLR 2.0
.Net Framework執行方式
- 編譯程式碼
- 建立出dll或者exe(IL)
- run起來的時候透過CLR及時編譯
- BCL會一起執行
- 變成機器碼並且run起來
結語
在這篇把.Net Framework做了一個基本介紹,了解了安裝包含那些內容、版號的含義和如何把程式執行起來。基本上對於.Net Framework會有一個基本的概念。
在進入.Net Core之前,下篇會對C#做一些基本介紹,不同版號的功能差異、和.Net Framework的對應關係,和.Net Compiler Platform (aka Roslyn)到來的原因。
參考資料
- Wiki 介紹 .Net Framework
- https://en.wikipedia.org/wiki/.NET_Framework
- 檢查安裝的.Net Framework
- https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed
沒有留言 :
張貼留言