-NET Framework 框架詳解
什麼是 .NET Framework?
.NET Framework 是 Windows 的託管執行環境,可爲其運行的應用提供各種服務。 它包括兩個主要組件:公共語言運行時 (CLR),它是處理運行應用的執行引擎;.NET Framework 類庫,它提供開發人員可從其自己的應用中調用的已測試、可重用代碼庫。.NET Framework 提供的用於運行應用的服務包括:
-
內存管理。 在許多編程語言中,程序員負責分配和釋放內存並處理對象生存期。 在 .NET Framework 應用中,CLR 代表應用提供這些服務。
-
常規類型系統。 在傳統編程語言中,基本類型由編譯器定義,這將使跨語言互操作性複雜化。 在 .NET Framework 中,基本類型由 .NET Framework 類型系統定義,並且是面向 .NET Framework 的所有語言所共有的。
-
一個全面的類庫。 處理常見的低級編程操作時,程序員可通過 .NET Framework 類庫使用類型及其成員的易訪問庫,而不必編寫大量代碼。
-
開發框架和技術。.NET Framework 包括用於特定區域應用開發的庫,例如用於 Web 應用的 ASP.NET、用於數據訪問的 ADO.NET、用於面向服務的應用的 Windows Communication Foundation,以及用於 Windows 桌面應用的 Windows Presentation Foundation。
-
語言互操作性。 面向 .NET Framework 的語言編譯器發出名爲公共中間語言 (CIL) 的中間代碼,反過來,通過公共語言運行時在運行時進行編譯。 藉助此功能,使用某種語言編寫的例程可由另一種語言訪問,程序員可以專注於使用其首選語言創建應用。
-
版本兼容性。 除少數例外,使用特定版本的 .NET Framework 開發的應用無需在更高版本中修改即可運行。
-
並行執行。 通過允許同一臺計算機上存在公共語言運行時的多個版本,.NET Framework 可幫助解決版本衝突。 這意味着應用的多個版本可以共存,並且應用可在構建它的 .NET Framework 版本上運行。 並行執行適用於 .NET Framework 版本組 1.0/1.1、2.0/3.0/3.5 和 4/4.5.x/4.6.x/4.7.x/4.8。
-
多定向。 通過面向 .NET Standard,開發人員可創建適用於該標準版本支持的多種 .NET Framework 平臺的類庫。 例如,面向 .NET Framework 4.6.1、NET Core 2.0 和 UWP 10.0.16299 的應用可以使用面向 .NET Standard 2.0 的庫。
.NET Framework 設計目標
.NET Framework 是一種技術,支持生成和運行 Windows 應用及 Web 服務。NET Framework 旨在實現下列目標:
-
提供一個一致的面向對象的編程環境,而無論對象代碼是在本地存儲和執行,還是在本地執行但在 Web 上分佈,或者是在遠程執行。
-
提供可執行以下操作的代碼執行環境:
-
將軟件部署和版本控制衝突最小化。
-
提高代碼(包括由未知的或不完全受信任的第三方創建的代碼)執行安全性。
-
消除腳本環境或解釋環境的性能問題。
-
` 使開發人員的經驗在面對類型大不相同的應用(如基於 Windows 的應用和基於 Web 的應用)時保持一致。
-
按照工業標準生成所有通信,確保基於 .NET Framework 的代碼可與任何其他代碼集成。
.NET Framework 框架組成
.NET Framework 是運行在 Windows 系列操作系統上的一個系統應用程序。它是 .NET 的核心部分,提供了建立和運行 .NET 應用程序所需要的編輯、 編譯等核心服務。它包括 2 個重要組成部分:公共語言運行時 (Common Language Runtime,CLR) 和 .NET Framework 類庫(Framework Class Library,FCL)。下圖顯示公共語言運行時和類庫與應用之間以及與整個系統之間的關係。該圖還顯示託管代碼如何在更大的結構內運行。
.NET Framework = CLR + FCL
下圖展示了 .NET Framework 框架更加詳細的組成與層次結構
.NET Framework = CLR + BCL + Application Model
****· OS
操作系統。
.NET Framework 從設計之初就是以微軟自家的 Windows 系統爲基礎,提供的 API 與 Windows 系統底層接口緊密關聯。所以 .NET Framework 只能運行在 Windows Server 與 Windows PC 上。
******· **CTS
**
CLR 一切圍繞類型展開。類型嚮應用程序和其他類型公開了功能。通過類型,用一種編程語言寫的代碼能與另一種語言寫的代碼溝通。由於類型是 CLR 的根本,所以微軟制定了一個正式的規範來描述類型的定義和行爲,這就是 “通用類型系統”(Common Type System,CTS)。
CTS 提供了 2 種類型:引用類型、值類型。
-
CTS 規範規定,一個類型可以包含零個或多個成員。這些成員包括:字段 (Field)、屬性 (Property)、方法 (Method)、事件 (Event)。
-
CTS 指定了類型可見性規則以及類型成員的訪問規則。private、public 等。
-
CTS 還爲類型繼承、虛方法、對象生存期等定義了相應的規則。
-
CTS 規定:所有類型最終必須從預定義的 System.Object 類型繼承。
爲了實現語言的互操作性,.NET Framework 採用以下的兩種方法來解決語言的劃分問題。
(1)標準化數據類型。建立通用語言運行環境中的通用類型系統(CTS),它爲最常用的數據類型 (如整數、實數、文本字符等) 定義了標準的內部描述和運算,並提供了將這些類型向所有的. NET 語言和 CLR 擴展的機制。這種機制能夠表示大多數現代編程語言的語法,消除了每種語言自己唯一且不兼容的方法。CTS 是一套 CLR 中的數據類型都必須遵守的規則。如果某種語言在創建數據類型時遵守了 CTS,則它創建和存儲的數據將能夠與其他也遵守了 CTS 的編程語言兼容。
(2)標準化應用程序格式。.NET 擁有自己的微軟中間語言 (MSIL)、元數據和清單的彙編。所有的. NET 語言的編譯器都生成這種格式。即通過從元數據中提取有關的 MSIL 的信息,編譯器、調試器、協調器等工具都可以分析處理任何一種源程序設計的數據。
********· ****CLS
各種編程語言之間除了類型不同,其他方面也存在着極大的區別。例如有的語言不區分大小寫,有的不支持 unsigned(無符號) 整數、操作符重載或者參數數量可變的方法。要創建很容易從其他編程語言中訪問的類型,只能從自己的語言中挑選其他所有語言都支持的功能。因此微軟定義了 “公共語言規範”(Common Language Specifition,CLS)。
CLS 詳細定義了一個最小功能集 (CTS 的一個子集)。任何編譯器只有支持這個功能集,生成的類型才能兼容其他符合 CLS、面向 CLR 語言生成的組件。
******· **CLR
公共語言運行時。
公共語言運行時是 .NET Framework 的基礎。 CLR 本質上就是. NET 虛擬機。 可將運行時看作一個在執行時管理代碼的代理,它提供內存管理、線程管理和遠程處理等核心服務,並且還強制實施嚴格的類型安全以及可提高安全性和可靠性的其他形式的代碼準確性。事實上,代碼管理的概念是運行時的基本原則。以運行時爲目標的代碼稱爲託管代碼,而不以運行時爲目標的代碼稱爲非託管代碼。
公共語言運行時管理內存、線程執行、代碼執行、代碼安全驗證、異常處理、編譯、垃圾回收以及其他系統服務。這些功能是在公共語言運行時上運行的託管代碼所固有的。
至於安全性,取決於包括託管組件的來源(如 Internet、企業網絡或本地計算機)在內的一些因素,託管組件被賦予不同程度的信任。這意味着即使用在同一活動應用中,託管組件既可能能夠執行文件訪問操作、註冊表訪問操作或其他須小心使用的功能,也可能不能夠執行這些功能。
運行時還通過實現稱爲常規類型系統 (CTS) 的嚴格類型驗證和代碼驗證基礎結構來加強代碼可靠性。CTS 確保所有託管代碼都是可以自我描述的。各種 Microsoft 編譯器和第三方語言編譯器都可生成符合 CTS 的託管代碼。這意味着託管代碼可在嚴格實施類型保真和類型安全的同時使用其他託管類型和實例。
此外,運行時的託管環境還消除了許多常見的軟件問題。例如,運行時自動處理對象佈局並管理對對象的引用,在不再使用它們時將它們釋放。這種自動內存管理解決了兩個最常見的應用錯誤:內存泄漏和無效內存引用。
運行時還提高了開發人員的工作效率。例如,程序員用他們選擇的開發語言編寫應用,卻仍能充分利用其他開發人員用其他語言編寫的運行時、類庫和組件。任何選擇以運行時爲目標的編譯器供應商都可以這樣做。以 .NET Framework 爲目標的語言編譯器使得用該語言編寫的現有代碼可以使用 .NET Framework 的功能,這大大減輕了現有應用的遷移過程的工作負擔。
儘管運行時是爲未來的軟件設計的,但是它也支持現在和以前的軟件。託管和非託管代碼之間的互操作性使開發人員能夠繼續使用所需的 COM 組件和 DLL。
運行時旨在增強性能。儘管公共語言運行時提供許多標準運行時服務,但是它從不解釋託管代碼。一種稱爲實時 (JIT) 編譯的功能使所有託管代碼能夠以它在其上執行的系統的本機語言運行。同時,內存管理器排除了出現零碎內存的可能性,並增大了內存引用區域以進一步提高性能。
最後,運行時可由高性能的服務器端應用(如 Microsoft SQL Server 和 Internet Information Services (IIS))承載。此基礎結構使您在享受支持運行時承載的行業最佳企業服務器的優越性能的同時,能夠使用託管代碼編寫業務邏輯。
******· **BCL
基類庫。它是 FCL 的一個子集,它們爲開發者提供了面向對象的特性所需的、和 CLR 緊密集成的一組可重用類的集合,並且此類庫僅使用 CTS 數據類型和標準的應用程序格式編制,從而簡化了應用開發過程和難度,而且很容易與第三方組件無縫集成,也能被使用任何一種 .NET 編程語言的應用程序所使用。CLI 規範的一部分,定義了集合、線程處理、控制檯以及用於生產幾乎所有程序所需的其他基類。
它是一組構成 System.(在一定的程度上構成 Microsoft.)命名空間的庫。BCL 是用於生成 ASP.NET、ASP.NET Core 等較高級應用程序框架的較低級通用框架。
.NET 5(和 .NET Core)及更高版本的 BCL 的源代碼包含在 .NET 運行時存儲庫中。這些 BCL API 中的大多數也可以在 .NET Framework 中獲取,因此可將此源代碼視爲 .NET Framework BCL 源代碼的一個分支。
以下術語通常指 BCL 引用的相同 API 集合:
-
核心 .NET 庫
-
框架庫
-
運行時庫
-
共享框架
******· **基本操作
構建於 BCL 之上,它是 FCL 的一部分,是 FCL 爲開發人員提供的基礎性操作(如:數據庫操作、IO 等)。
面向數據:ADO.NET、Entity Framework、Linq To SQL 等。
面向服務:WCF、WF 和 Data Services 等。
******· **框架模板
面向應用:開發框架 (BS/CS)、IT 產品
******· **語言
.NET Framework 的核心是 CLR。在 CLR 的控制下運行的代碼稱爲託管代碼,在 CLR 執行代碼之前,需要編譯,分爲 2 個階段:
(1)把源代碼編譯爲 Microsoft 中間語言 (MSIL)。
(2)CLR 把 MSIL 編譯爲平臺專用的機器代碼。
.NET 平臺支持很多語言,常見的有 VB、C++、C#、F#、J#(Java)JScript 等。無論使用哪種語言來編寫源代碼,都會通過編譯器編譯成 MISL,從而轉換成機器碼,都能被機器識別。語言的集成性主要是公共語言規範(CLS)和通用類型系統(CTS)一起確保了語言的相互操作性。CLS 是一個最低標準集,所有面向. NET 的編譯器都必須支持它,每個語言都符合這個規範,從而滿足了語言的互相調用和互操作。
.NET Framework 下載與安裝
- 下載地址:https://dotnet.microsoft.com/download/dotnet-framework
- 安裝
同一臺電腦上可以同時安裝多個版本的 .NET Framework 版本。
同一個版本的 .NET Framework 支持的 Windows 版本不同。
支持的 Windows 版本
-
Windows 10 和 Windows Server 2016
-
Windows 8.1 和 Windows Server 2012 R2
-
Windows 8 和 Windows Server 2012
-
Windows 7 和 Windows Server 2008 R2
-
Windows Vista 和 Windows Server 2008
不受支持的 Windows 版本
-
Windows XP 和 Windows Server 2003
技術棧
1、.NET:C#、.NET5、.NET6、.NET Core、MVC、ASP.NET Core、Web API、RESTful API
2、jQuery、Vue.js、Bootstrap
3、數據庫:SQLServer、MySQL、PostgreSQL、Oracle、SQLite、SequoiaDB 、
Redis、MongoDB、ElasticSearch、TiDB
4、ORM:Dapper、Entity Framework、FreeSql、SqlSugar、分庫分表
5、架構:領域驅動設計 DDD、ABP
6、環境:跨平臺、Linux、Windows、MaxOS、IIS、Nginx
7、移動 App:Android、IOS、HarmonyOS、微信、小程序、快應用、
Xamarin、uni-app、MUI、Flutter、Framework7、Cordova、Ionic、React Native、Taro、NutUI、
mpvue、Smobiler
其他:
-
雲原生、CI/CD、DevOps、微服務、Docker、K8S
-
Dapr、RabbitMQ、Kafka、分佈式、大數據、高併發、負載均衡、中間件
-
RPC、ELK
-
.NET + Docker + jenkins + Github + Harbor + K8S
-
Python、Go
出處:http://www.cnblogs.com/SavionZhang
作者:張傳寧 微軟 MCP、系統架構設計師、系統集成項目管理工程師、科技部創新工程師。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/xSZ4PXXoLvSfEaLqQVkZQA