.NET
.NET 平臺是一個開發(fā)框架,支持多種編程語言,用于構(gòu)建各種類型的應(yīng)用程序,包括桌面應(yīng)用、Web 應(yīng)用、移動應(yīng)用、云服務(wù)等。這個平臺由 Microsoft 提供,并以其強(qiáng)大的工具和類庫著稱
云應(yīng)用
跨平臺客戶端應(yīng)用
Windows 應(yīng)用
其他應(yīng)用類型
功能
借助 .NET 功能,開發(fā)人員可以高效地編寫可靠的高性能代碼
- 異步代碼
- 屬性
- 反射
- 代碼分析器
- 委托和 lambda
- 事件
- 異常
- 垃圾回收
- 泛型類型
- LINQ(語言集成查詢)。
- 并行編程和托管線程
- 類型推理 - C#、F#、Visual Basic。
- 類型系統(tǒng)
- 不安全代碼
運(yùn)行時
公共語言運(yùn)行時 (CLR) 是生成所有 .NET 應(yīng)用的基礎(chǔ)。 運(yùn)行時的基本功能包括:
- 垃圾回收
- 內(nèi)存安全和類型安全
- 對編程語言的全面支持
- 跨平臺設(shè)計
.NET 有時被稱為“托管代碼”運(yùn)行時。 之所以稱為“托管”,主要是因為它使用垃圾回收器進(jìn)行內(nèi)存管理,還因為它強(qiáng)制執(zhí)行類型和內(nèi)存安全。 CLR 虛擬化(或抽象)了各種操作系統(tǒng)和硬件概念,例如內(nèi)存、線程和異常
CLR 從一開始就被設(shè)計為一個跨平臺運(yùn)行時。 它已被移植到多個操作系統(tǒng)和體系結(jié)構(gòu)。 通常,跨平臺 .NET 代碼不需要經(jīng)過重新編譯就能在新環(huán)境中運(yùn)行。 相反,你只需安裝一個不同的運(yùn)行時即可運(yùn)行應(yīng)用
運(yùn)行時為調(diào)試器、轉(zhuǎn)儲和跟蹤工具以及可觀測性公開各種診斷服務(wù)和 API。 可觀測性實現(xiàn)主要是圍繞 OpenTelemetry 構(gòu)建的,可實現(xiàn)靈活的應(yīng)用程序監(jiān)視和站點可靠性工程 (SRE)。
運(yùn)行時通過結(jié)合使用 P/Invoke、值類型以及跨本機(jī)/托管代碼邊界對值進(jìn)行 blit 的功能,提供低級別的 C 樣式互操作功能。
運(yùn)行時庫
.NET 具有一組全面的標(biāo)準(zhǔn)類庫。 這些庫為許多常規(guī)用途類型和特定于工作負(fù)載的類型和實用工具功能提供實現(xiàn)。
下面是在 .NET 運(yùn)行時庫中定義的一些類型示例:
- 每個 .NET 類型都派生自 System.Object 類型
- 基元值類型,如 System.Boolean 和 System.Int32
- 集合,例如 System.Collections.Generic.List<T> 和 System.Collections.Generic.Dictionary<TKey,TValue>
- 數(shù)據(jù)類型,例如 System.Data.DataSet 和 System.Data.DataTable
- 網(wǎng)絡(luò)實用程序類型,如 System.Net.Http.HttpClient
- 文件和流 I/O 實用程序類型,如 System.IO.FileStream 和 System.IO.TextWriter
- 序列化實用程序類型,例如 System.Text.Json.JsonSerializer 和 System.Xml.Serialization.XmlSerializer
- 高性能類型,例如 System.Span<T>、System.Numerics.Vector 和 System.Span<T>
有關(guān)詳細(xì)信息,請參閱運(yùn)行時庫概述
.NET 歷史信息
- 2002 年,Microsoft 發(fā)布了 .NET Framework,這是用于創(chuàng)建 Windows 應(yīng)用的開發(fā)平臺
- 2014 年,Microsoft 推出了 .NET Core 作為 .NET Framework 的跨平臺開源后續(xù)產(chǎn)品,可在 Windows、Linux 和 macOS 上運(yùn)行
- 2020年,.NET 5是.NET Core 3.1 之后的下一個版本去掉了名稱中的“Core”部分,.NET 5標(biāo)志著.NET Core和.NET Framework的合并。之前,這兩者是分開開發(fā)和維護(hù)的,.NET 5將它們整合為一個平臺,為跨平臺和一致性提供更好的支持
- 2021年, .NET 6繼續(xù)加強(qiáng).NET 5的合并版本,并提供更多的功能和改進(jìn),包括對Windows、Linux、macOS等平臺的支持,性能改進(jìn),新的C#語言特性等,.NET 6 是從 .NET 5 開始的 .NET 統(tǒng)一計劃的最后部分,跨平臺、桌面、IoT 和云應(yīng)用的統(tǒng)一的SDK、基本庫和運(yùn)行時(Runtime) 都在 .NET 6 統(tǒng)一
- 2022年,.NET 7 建立在 .NET 6 建立的基礎(chǔ)之上,.NET 7 主要關(guān)注領(lǐng)域包括:
- 改進(jìn)對 云原生 方案的支持
- 升級舊項目的工具
- 簡化開發(fā)人員使用容器的難度
- 2023年,.NET8 又帶來了很多方面的增強(qiáng),比如:Blazor 開發(fā)框架、人工智能、云原生.NET Aspire、性能、native AOT 等
- .NET 5、.NET 6、.NET 7 和 .NET 8 是具有一組統(tǒng)一功能和 API 的單一產(chǎn)品,可用于 Windows 桌面應(yīng)用和跨平臺控制臺應(yīng)用、云服務(wù)和網(wǎng)站
基于以上版本,歸類目前.net 的主要版本有:
.NET Framework
.NET Framework 是管理面向 .NET Framework 的應(yīng)用的運(yùn)行時執(zhí)行環(huán)境。 它包括公共語言運(yùn)行時(提供內(nèi)存管理和其他系統(tǒng)服務(wù))和一個全面的類庫(使程序員能利用強(qiáng)大可靠的代碼實現(xiàn)所有主要領(lǐng)域的應(yīng)用開發(fā))
什么是 .NET Framework?
NET Framework 是 Windows 的托管執(zhí)行環(huán)境,可為其運(yùn)行的應(yīng)用提供各種服務(wù)
主要組件
.NET Framework包括兩個主要組件:
- 公共語言運(yùn)行時 (CLR),它是處理運(yùn)行應(yīng)用的執(zhí)行引擎
- 執(zhí)行托管代碼:其中包括將源代碼編譯為中間語言(IL,Intermediate Language),并在運(yùn)行時將 IL 代碼轉(zhuǎn)換為本機(jī)代碼
- 垃圾回收:用于管理應(yīng)用程序的內(nèi)存。它負(fù)責(zé)分配和釋放內(nèi)存,防止內(nèi)存泄漏和懸空引用
- 內(nèi)存安全和類型安全:通過代碼訪問權(quán)限和代碼驗證來確保.NET 應(yīng)用程序的安全性。它實施了代碼訪問安全策略,以確保應(yīng)用程序不會執(zhí)行危險的操作
- 異常處理機(jī)制:能處理.NET 應(yīng)用程序中的異常,提供了一套強(qiáng)大的異常處理機(jī)制,允許開發(fā)者編寫并捕獲異常,并確保程序在異常情況下能夠高效地處理
- 對編程語言的全面支持:允許在同一應(yīng)用程序中使用多種語言編寫的組件
- .NET Framework 類庫,它提供開發(fā)人員可從其自己的應(yīng)用中調(diào)用的已測試、可重用代碼庫
- Base Class Library,BCL:包含了許多基本的類和類型,用于處理字符串、集合、IO操作、異常處理等
- WPF:用于構(gòu)建富客戶端應(yīng)用程序的UI框架,支持XAML語法,使開發(fā)者能夠創(chuàng)建現(xiàn)代化、可視化的用戶界面
- WCF:用于構(gòu)建分布式服務(wù)的框架,支持創(chuàng)建服務(wù)導(dǎo)向的應(yīng)用程序,并提供通信、安全、事務(wù)等功能
- Windows Forms:用于創(chuàng)建傳統(tǒng)的桌面應(yīng)用程序的UI框架,通過可視化設(shè)計工具和事件驅(qū)動模型,使界面開發(fā)更加簡便
- ADO.NET:用于訪問和操作數(shù)據(jù)庫的框架,提供了一系列的類和方法,支持連接到各種數(shù)據(jù)庫系統(tǒng)
- ASP.NET:用于構(gòu)建Web應(yīng)用程序的框架,支持創(chuàng)建動態(tài)網(wǎng)頁、處理HTTP請求和響應(yīng)、管理用戶會話等
- LINQ:提供一種統(tǒng)一的查詢語法,使開發(fā)者能夠在C#或VB.NET代碼中方便地進(jìn)行數(shù)據(jù)查詢和操作
以下是 CLR 和類庫與應(yīng)用之間以及與整個系統(tǒng)之間的關(guān)系

服務(wù)
.NET Framework 提供的用于運(yùn)行應(yīng)用的服務(wù)包括:
- 內(nèi)存管理:CLR 代表應(yīng)用負(fù)責(zé)分配和釋放內(nèi)存并處理對象生存期
- 常規(guī)類型系統(tǒng): 基本類型由 .NET Framework 類型系統(tǒng)定義,且是面向 .NET Framework 的所有語言所共有的
- 一個全面的類庫:處理常見的低級編程操作時,可通過 .NET Framework 類庫使用類型及其成員的易訪問庫
- 開發(fā)框架和技術(shù):NET Framework 包括用于特定區(qū)域應(yīng)用開發(fā)的庫
- 用于 Web 應(yīng)用的 ASP.NET
- 用于數(shù)據(jù)訪問的 ADO.NET
- 用于面向服務(wù)的應(yīng)用的 Windows Communication Foundation(WCF)
- 用于 Windows 桌面應(yīng)用的 Windows Presentation Foundation(WPF)
- 語言互操作性
- 面向 .NET Framework 的語言編譯器發(fā)出名為公共中間語言 (CIL) 的中間代碼
- 版本兼容性
- 并行執(zhí)行
- 多定向
.NET Core
.NET Core 和 .NET Framework 是 Microsoft 的兩個不同的軟件框架,主要用于開發(fā)和運(yùn)行跨平臺的應(yīng)用程序
內(nèi)容
- .NET Core 支持跨平臺運(yùn)行,支持在Windows、Linux 和 macOS 平臺運(yùn)行
- .NET Core 不支持傳統(tǒng)的 Windows Forms 和 WPF 桌面應(yīng)用程序,但支持面向現(xiàn)代云應(yīng)用和微服務(wù)的框架
- .NET Core 相對于.NET Framework 具有更先進(jìn)的包管理系統(tǒng),支持依賴注入,對于依賴關(guān)系能更為靈活的處理
- 與 .NET Framework 使用的 運(yùn)行時 CLR 不同,.NET Core 采用全新的跨平臺運(yùn)行時 Core CLR
- .NET Core 適用于 云、微服務(wù)、Web API、跨平臺應(yīng)用程序
- .NET Core 引入了 Blazor WebAssembly 項目,允許在瀏覽器中運(yùn)行 .NET 應(yīng)用程序
- .NET Core 支持 C# 8.0
注意:.NET Core 目前已經(jīng)合并進(jìn) .NET 5 中,并由后續(xù)的 .NET 5 及更高的版本進(jìn)行推進(jìn)
.NET 5
.NET 5 是繼 .NET Core 3.1 之后 .NET Core 的下一個主要版本,與 NET Core 或 .NET Framework 相比,.NET 5 會支持類型更多的應(yīng)用和平臺
內(nèi)容
- .NET 5 合并了 .NET Core 和 .NET Framework 的特性,統(tǒng)一為一個單一的 .NET 平臺
- .NET 5 繼續(xù)支持跨平臺,并增加了對 Windows、Linux 和 macOS 的更廣泛的支持
- NET 5 引入了對 Windows Forms 和 WPF 的支持,使得開發(fā)者能夠在 .NET 5 中使用這些傳統(tǒng)框架
- .NET 5 進(jìn)一步加強(qiáng)了 Blazor WebAssembly,并提供更多的 WebAssembly 支持
- .NET 5 引入了新的 .NET SDK,整合了 .NET Core 和 .NET Framework 的開發(fā)工具
- .NET 5 提供對 .NET Standard 類庫的支持,可以更方便地在各種 .NET 平臺中重用類庫
- .NET 5 支持多種應(yīng)用類型,包括 ASP.NET Core、Blazor、控制臺應(yīng)用、Windows 窗體、WPF 等
- .NET 5 引入了 C# 9.0,并提供了一些新的語言特性
- .NET 5引入了一些性能優(yōu)化和新的 JIT 編譯器
- .NET 5 不會替換 .NET Framework,也不會替代 .NET Standard
改進(jìn)和新功能
- C# 更新
- F# 更新
- Visual Basic 更新
- System.Text.Json 新功能
- 單一文件應(yīng)用
- 應(yīng)用剪裁
- Windows Arm64 和 Arm64 內(nèi)部函數(shù)
- 轉(zhuǎn)儲調(diào)試的工具支持
- 對于可以為 null 的引用類型,運(yùn)行時庫的批注百分比為 80%
- 性能改進(jìn):
注意:
- .NET 5 版本跳過編號 4.x,以避免與 .NET Framework 4.x 混淆,并從名稱中刪除了“Core”,強(qiáng)調(diào) .NET 未來的主要實現(xiàn)
- SP.NET Core 5.0 雖以 .NET 5 為基礎(chǔ),但保留了名稱“Core”以避免與 ASP.NET MVC 5 混淆
- Entity Framework Core 5.0 保留了名稱“Core”,以避免與 Entity Framework 5 和 Entity Framework 6 混淆
.NET 6
.NET 6 提供 .NET 統(tǒng)一計劃的最終部分,該計劃在 .NET 5 中啟動。 .NET 6 在移動、桌面、IoT 和云應(yīng)用之間統(tǒng)一了 SDK、基礎(chǔ)庫和運(yùn)行時
內(nèi)容
- .NET 6 繼續(xù)提升跨平臺性能,并支持 Windows、Linux、macOS、iOS、Android 和瀏覽器 WebAssembly
- 進(jìn)一步改進(jìn)了 ASP.NET Core,并提供了新的 Web 開發(fā)功能,包括 Blazor 的增強(qiáng)支持
- .NET 6 繼續(xù)增強(qiáng) Windows Forms 和 WPF 的支持,提供更多功能
- .NET 6 引入了新的 .NET SDK,整合了 .NET Core 和 .NET Framework 的開發(fā)工具
- .NET 6 提供了更多的類庫和框架,以支持更廣泛的應(yīng)用類型,包括移動應(yīng)用、嵌入式設(shè)備、云原生應(yīng)用等
- .NET 6 支持 Windows、Azure 和云原生應(yīng)用的更好集成,包括對 Windows ARM64 的支持
- .NET 6 進(jìn)一步支持多種應(yīng)用類型,包括 ASP.NET Core、Blazor、控制臺應(yīng)用、Windows 窗體、WPF 等
- .NET 6 引入了 C# 10.0,提供了新的語言特性
- .NET 6 繼續(xù)優(yōu)化性能,提供更好的運(yùn)行時性能和資源利用率
改進(jìn)和新功能
- JIT 性能改進(jìn)
- Crossgen2
- Arm64 支持
- 熱重載
- .NET MAUI
- C# 10 和 模板
- F#
- SDK 工作負(fù)載
- System.Text.Json APIs
- 源生成器
- 可寫 DOM
- IAsyncEnumerable 序列化
- 其他新 API
- HTTP/3
- ASP.NET Core
- OpenTelemetry
- .NET 包驗證
- 性能改進(jìn):
.NET 7
.NET 7 是 .NET 6 的后繼版本,側(cè)重于統(tǒng)一、新式、簡單和快速的特點
內(nèi)容
- .NET 7 的多平臺應(yīng)用程序 UI (MAUI) 將 Android、iOS、macOS 和 Windows API 統(tǒng)一到一個API中,以提供了一個項目來處理跨設(shè)備及其平臺的多目標(biāo)
- .NET 7 進(jìn)一步改進(jìn)了 ASP.NET Core
- .NET 7 繼續(xù)增強(qiáng) Windows 窗體 和 WPF 的支持,提供更多功能
- .NET 庫 API 做出了許多改進(jìn)
- .NET 7 對反射、堆棧替換 (OSR)、啟動時間、本機(jī) AOT、循環(huán)優(yōu)化和許多其他領(lǐng)域進(jìn)行優(yōu)化改進(jìn)
- .NET 7 改進(jìn)了 Arm64 的代碼生成 和 正則表達(dá)式
- .NET 7 SDK 提升了 CLI 模板體驗
- .NET 7 改進(jìn)了可觀測性,幫助了解在應(yīng)用縮放時以及技術(shù)復(fù)雜性增加時應(yīng)用的狀態(tài)
- .NET 7 引入了 C# 11,提供了新的語言特性
改進(jìn)和新功能
- C# 11
- F# 7
- .NET MAUI
- ASP.NET Core
- EF Core
- Windows 窗體
-
WPF
.NET 升級助手和 CoreWCF - System.Text.Json 序列化
- 正則表達(dá)式
- .NET 類庫
- 可觀察性 - OpenTelemetry
- ML.NET
- 性能改進(jìn)
.NET 7 文檔更新:https://learn.microsoft.com/zh-cn/dotnet/whats-new/dotnet-7-docs
.NET 8
.NET 8 是 .NET 7 的后繼版本,著重強(qiáng)調(diào)云、性能、全棧 Blazor、AI 和 Native AOT 是.NET 8的主要亮點
內(nèi)容
- .NET 8 提供云就緒堆棧.NET Aspire,.NET Aspire是一個用于使用 .NET 構(gòu)建彈性、可觀察和可配置的云原生應(yīng)用程序的堆棧
- .NET 8 可以無需等待 JIT(即時)編譯器在運(yùn)行時編譯代碼,無需部署JIT編譯器和IL代碼。AOT 應(yīng)用程序僅部署應(yīng)用程序所需的代碼,應(yīng)用程序現(xiàn)在可以在不允許使用 JIT 編譯器的受限環(huán)境中運(yùn)行
- .NET 8 中的 Blazor 可以同時使用服務(wù)器和客戶端來處理所有的 Web UI 需求,通過專注于優(yōu)化頁面加載時間、可擴(kuò)展性和提升用戶體驗的多項新增強(qiáng)功能,可以在同一應(yīng)用程序中使用Blazor Server 和 Blazor WebAssembly,在運(yùn)行時自動將用戶從服務(wù)器轉(zhuǎn)移到客戶端
- .NET 8 可以通過 .NET SDK 中的AI 功能以及與多種工具的無縫集成來輕松利用 AI
- .NET MAUI 提供單一項目系統(tǒng)和單一代碼庫來構(gòu)建 WinUI、Mac Catalyst、iOS 和 Android 應(yīng)用程序
- 使用 .NET 比以往更輕松、更安全地使用容器打包應(yīng)用程序。每個 .NET 映像都包含一個非 root 用戶,從而通過單行配置啟用更安全的容器
改進(jìn)和新功能
- .NET Aspire
- ASP.NET Core
- Core .NET 庫:
- .NET MAUI
.NET 8 的新增功能: https://learn.microsoft.com/zh-cn/dotnet/core/whats-new/dotnet-8?source=recommendations
備注: 由于.NET 8 由2023年11月24 發(fā)布,作為長期支持版本,目前仍處于維護(hù)階段,故
- 新框架可能存在一些未知的問題和漏洞,這會影響到開發(fā)的穩(wěn)定性和可靠性
- 新框架可能與現(xiàn)有的代碼庫和工具不兼容,這會導(dǎo)致一些問題和限制
- 新框架可能還沒有完善的文檔和社區(qū)支持,這會給開發(fā)人員帶來很大的困擾
- 新框架可能存在一些潛在的風(fēng)險因素,如安全問題、性能問題等,這會影響到開發(fā)的效率和質(zhì)量
.NET Standard
.NET Standard 是一種規(guī)范,定義了一組API,用于在不同的.NET平臺上實現(xiàn)可移植的代碼。它的目的是為不同的 .NET 平臺提供一致的API,以便開發(fā)人員可以編寫可移植的代碼,而不必?fù)?dān)心運(yùn)行時環(huán)境的不同
.NET Standard 版本控制規(guī)則
- 累加性:.NET Standard 較高的版本會包含較低版本的所有 API
- 不可變:一旦發(fā)布,.NET Standard 版本就會凍結(jié)起來
.NET Standard 實現(xiàn)形式
- .NET Standard 引用程序集的主要分發(fā)載體是 NuGet 包,實現(xiàn)會以適用于每個 .NET 實現(xiàn)的各種方式提供
- NuGet 包面向一個或多個框架 + .NET Standard 包面向“.NET Standard”框架
.NET Standard 問題
- API 的限制:由于 .NET Standard 是為了提供一組共享 API 而創(chuàng)建的,因此它可能會限制某些特定框架或平臺上可用的 API;
.NET 5+ 中的解決方案:實現(xiàn)某項功能時,該功能便已可供所有 .NET 5+ 應(yīng)用和庫使用,因為代碼基底是共享的
- 版本控制問題:由于 .NET Standard 是一個版本化的框架,API 規(guī)范與其實現(xiàn)的分離導(dǎo)致 API 規(guī)范版本與實現(xiàn)版本之間出現(xiàn)復(fù)雜的映射,因此可能會出現(xiàn)版本控制問題,例如需要使用不同版本的 .NET Standard 來支持不同的 API;
NET 5+ 中的解決方案: .NET 5+ API 規(guī)范與 它的 實現(xiàn)之間不存在任何分離
- 兼容性問題:由于 .NET Standard 是為了解決 .NET Framework、.NET Core 和 Xamarin 之間的兼容性問題而創(chuàng)建的,.NET Standard 公開了特定于平臺的 API,因此當(dāng)它在不具有給定 API 實現(xiàn)的平臺上運(yùn)行時,可能會出現(xiàn)與其他框架或平臺不兼容的問題;
.NET 5+ 中的解決方案:.NET 5+ SDK 包括默認(rèn)啟用的代碼分析器。 平臺兼容性分析器會檢測在其上運(yùn)行的平臺所不支持的 API 的意外使用情況
本文知識點存在一定局限性,具體疑難點請參考官網(wǎng):https://learn.microsoft.com/zh-cn/dotnet/core/introduction