.NET Framework是微軟提供的可以在Windows上運行、建置的軟體開發框架。
.NET Framework主要由通用執行環境(CLR),與類別庫(Class Library)所組成,在使用上對我來說有點像是像是一個綜合套件安裝包,我們C#程式的使用、建置、運行、都要仰賴其中提供的套件,在微軟的下載頁面有提供兩種安裝包,分別為.NET Framework Runtime安裝包與.NET Framework DevPack開發者工具安裝包,兩者主要的差異在於後者提供編譯與開發用的相關工具,讓我們開發.NET相關應用程式,不過在.NET Framework 4.5.2開始有些不同,像是C#編譯器已經抽離DevPack改交由Visual Studio來安裝。
我們以C#撰寫之程式碼編譯後成中繼語言(IL),會交由通用執行環境(CLR)來執行,CLR會對IL程式碼進行安全性分析,而後進行JIT即時編譯(just-in-time compilation)轉換成該平台對應之機器碼,而就算同樣在intel X86平台中,CLR也會因為處理器新舊版本不同或系列不同而所包含之指令集不同產生最佳化機器碼,CLR還提供資源回收(GC)、例外處理、執行緒管理等功能。
我查閱的一些資料中,在以C#角度來談.NET相關功能的話類別庫會多以基礎類別庫(Base Class Library,簡稱BCL)來稱呼,而以.NET Framework角度來談論的資料中類別庫會以Framework Class Library(FCL)來稱呼,在Stack Overflow上的討論中,網友表示Framework Class Library是所有類別庫(包含Base Class Library)的總稱,但大部分情況下會混用BCL與FCL兩個名稱,我在微軟官方文件中沒有看到兩者差異的描述,我們只要知道類別庫提供我們各式各樣的豐富功能讓我們的程式來使用。
StackOverflow:BCL (Base Class Library) vs FCL (Framework Class Library)
C#沒有自己的類別庫,完全仰賴.NET Framework類別庫,像是程式語言中基本型別如int、string,就是由System.Int32與System.String命名空間來提供,C#編譯後的程式完全也無法獨立運行,需要CLR才能執行。C#是專門用來開發.NET Framework之應用程式之語言,所以基本上來說,C#完全是為.NET Framework而生的程式語言。儘管有其他相容於.NET Framework的程式語言,卻因為各程式語言的功能需求不同,其編譯器針對.NET Frameworke實作成度不同而有所差異,C#程式語言是最能完全使用.NET Framework所有功能之程式語言。
.NET Framework的安裝版本號是依類別庫Class Library版本號來命名。其版本號並不等於安裝包中提供之CLR之版本號。而類別庫中所提供的一些新功能,也需要新版的C#編譯器才能編譯。在.NET Framework 4.X提供之CLR版本為4.0。若要執行.NET Framework 3.5建置之程式需額外安裝.NET Framework 3.5,由該安裝包中提供的CLR 2.0版來運行。