系列目錄 【已更新最新開發文章,點選檢視詳細】
什麼是 .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
成在管理,敗在經驗;嬴在選擇,輸在不學! 貴在堅持!
歡迎關注作者頭條号 張傳甯IT講堂,擷取更多IT文章、視訊等優質内容。
個人作品
1、BIMFace.Community.SDK.NET開源位址:https://gitee.com/NAlps/BIMFace.SDK
系列部落格:https://www.cnblogs.com/SavionZhang/p/11424431.html
系列視訊:https://www.cnblogs.com/SavionZhang/p/14258393.html
2、ZCN.NET.Common開源位址:https://gitee.com/NAlps/zcn.net.common
技術棧
1、Visual Studio、.C#/.NET、.NET Core、MVC、Web API、RESTful API、gRPC、SignalR、Python
2、jQuery、Vue.js、Bootstrap
3、資料庫:SQLServer、MySQL、PostgreSQL、Oracle、SQLite、Redis、MongoDB、ElasticSearch、TiDB、達夢DM、人大金倉、 神通、南大通用 GBase、華為 GaussDB 、騰訊 TDSQL 、阿裡 PolarDB、螞蟻金服 OceanBase、東軟 OpenBASE、浪潮雲溪資料庫 ZNBase
4、ORM:Dapper、Entity Framework、FreeSql、SqlSugar、分庫分表、讀寫分離
5、架構:領域驅動設計 DDD、ABP
6、環境:跨平台、Windows、Linux(CentOS、麒麟、統信UOS、深度Linux)、maxOS、IIS、Nginx、Apach
7、移動App:Android、IOS、HarmonyOS、微信、小程式、快應用、Xamarin、uni-app、MUI、Flutter、Framework7、Cordova、Ionic、React Native、Taro、NutUI、Smobiler
雲原生、微服務、Docker、CI/CD、DevOps、K8S;
Dapr、RabbitMQ、Kafka、分布式、大資料、高并發、負載均衡、中間件、RPC、ELK;
.NET + Docker + jenkins + Github + Harbor + K8S;
出處:www.cnblogs.com/SavionZhang
作者:張傳甯 微軟MCP、系統架構設計師、系統內建項目管理工程師、科技部創新工程師。
專注于微軟.NET技術(.NET Core、Web、MVC、WinForm、WPF)、通用權限管理系統、工作流引擎、自動化項目(代碼)生成器、SOA 、DDD、 雲原生(Docker、微服務、DevOps、CI/CD);PDF、CAD、BIM 審圖等研究與應用。
多次參與電子政務、圖書教育、生産制造等企業級大型項目研發與管理工作。
熟悉中小企業軟體開發過程:需求分析、架構設計、編碼測試、實施部署、項目管理。通過技術與管理幫助中小企業快速化實作網際網路技術全流程解決方案。
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
如有問題,可以通過郵件[email protected]聯系。共同交流、互相學習。
如果您覺得文章對您有幫助,請點選文章右下角【推薦】。您的鼓勵是作者持續創作的最大動力!