Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 記錄軟體開發的點點滴滴 著重於微軟技術、網頁開發、DevOps、C#, Asp .net Mvc、Azure、AI、Chatbot、Docker、Data Science

[.net framework 工程師看.net core][02]起源.Net Framework

image
圖片來源:https://pixabay.com/en/annual-report-book-brochure-686343/

在這一篇,將會從起源,介紹.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
image
BCL和CLR組合在一起通常稱為Runtime,當提到版本指的都是這個 - 這邊沒有包含建制工具的部分

一般來說,當提到.Net Framework版本的時候,其實指的都是Runtime

.Net Framework安裝位置和內容

基本上在安裝.Net Framework的時候就是更新BCLCLR,而大版號的CLR 1臺電腦只能夠裝3個版本:

  1. CLR 1
  2. CLR 2
  3. CLR 4

基本上應該沒有人在用CLR 1,大家應該都在CLR 4,而只能有一個大版號的意思是,假設有臺電腦裝的是4.5.2,如果他更新4.6.1,那麼這台電腦只剩下4.6.1。沒辦法 4.5.2和4.6.1並存

image
電腦只能夠裝最多3個大版號的CLR

.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 toolIncluded inReplaces
WindowsWindows Server
1.01.02002-02-132009-07-14[22]Visual Studio .NET[23]XP[a]N/AN/A
1.11.12003-04-24Visual Studio .NET 2003[23]N/A20031.0[24]
2.02.02005-11-072011-07-12[22]Visual Studio 2005[25]N/A2003, 2003 R2,[26] 2008 SP2, 2008 R2 SP1N/A
3.02.02006-11-062011-07-12[22]Expression Blend[27][b]Vista2008 SP2, 2008 R2 SP12.0
3.52.02007-11-192011-07-12[22]
(except 3.5 SP1)
Visual Studio 2008[28]7, 8[c], 8.1[c], 10[c]2008 R2 SP12.0, 3.0
4.042010-04-122016-01-12[29]Visual Studio 2010[30]N/AN/AN/A
4.542012-08-152016-01-12[29]Visual Studio 2012[31]820124.0
4.5.142013-10-172016-01-12[29]Visual Studio 2013[32]8.12012 R24.0, 4.5
4.5.242014-05-05N/AN/AN/AN/A4.0–4.5.1
4.642015-07-20N/AVisual Studio 2015[33]10N/A4.0–4.5.2
4.6.142015-11-30[34]N/AVisual Studio 2015 Update 110 v1511N/A4.0–4.6
4.6.242016-08-02[35]N/A10 v160720164.0–4.6.1
4.742017-04-05[36]N/AVisual Studio 201710 v1703N/A4.0–4.6.2
來源:.NET Framework version history
可以看到.Net Framework每一個版本新增的部分:
image
wikipedia:.Net Framework
.Net Framework 3.5這個版本最特別:
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執行方式

image
從source code到run起來的經過
  1. 編譯程式碼
  2. 建立出dll或者exe(IL)
  3. run起來的時候透過CLR及時編譯
  4. BCL會一起執行
  5. 變成機器碼並且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
comments powered by Disqus