C#
是一種簡單、現代、面向對象和類型安全的編程語言。。
.NET
是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework
、.NET Core
(及後續的.NET 5+版本),以及社區版本Mono
。除此以外,C#.NET體系還有很多概念,本文就來簡單瞭解下C#、.NET Framework、CLR、.NETCore、CTS、JIT等概念。
01、.NET發展歷史: Framework ⇒ Core
簡單梳理一下.NET框架的發展:.NET Framework
⇒.NET (Core)
。表格原文原文連接。
- LTS:long time support,長期支持版本(3年左右),非LTS版本支持週期18個月左右。
- RC:Release Candidate,候選正式版本,可作爲正式版本使用。
推薦一個在線的版本,做的非常漂亮:Microsoft .NET History
🔸.NET Framework(1.0 —— 4.8.1):.NET Framework
是基於Windows系統的.NET
框架,從2002年發佈,到最新的4.8.*版本,已經停止發展。
- 最後的
4.8.*
版本依然還在維護,還是可以使用的,支持的最低操作系統是Windows 7。 - 如果要運行在XP系統上,則只能使用
.NET Framework4
版本,支持最低Windows XP SP3。 .NET Framework
是基於Windows系統的,因此也只能在Windows系統上運行。
🔸.NET Core(Core1/2/3,5/6/7/8/9):從2016年發佈首個.NET Core1
,和後面的.NET Core2/3、.NET 5/6/7/*是一個體系的,只是從.NET5
開始更改了命名。這是微軟推出的新一代.NET框架,用來代替原有的.NET Framework
,核心特點就是開源、跨平臺,這也是.NET未來重點發展、投資的地方。
- 開源,採用MIT和Apache協議作爲開源協議,對商業十分友好。
- 跨平臺,支持Windows、MacOS、Linux,支持x64,、x86、ARM架構。
02、.NET Framework框架
.NET Framework 是運行在 Windows 系列操作系統上的一個系統應用程序。它是 .NET 的核心部分,提供了建立和運行 .NET 應用程序所需要的編輯、 編譯等核心服務。它包括2個重要組成部分:公共語言運行時 (Common Language Runtime,CLR) 和 .NET Framework 類庫(Framework Class Library,FCL)。
🚩對於Framework:
.NET Framework
設計之初就是基於Windows系統的,其API與Windows底層接口緊密關聯,所以DotNET應用也只能運行在Windows系統上了。同時,.NET Framework
也作爲Windows操作系統的組件內置在操作系統中。- 同一臺電腦上可以同時安裝多個版本的 .NET Framework 版本。
- .NET Framework = 運行時CLR + 類庫FCL。
📢爲了解決跨平臺的問題,早期是社區開源的
Mono
,後來就是Mono
被微軟收購後,統一實現並開源了全新的.NET Core
框架。不過兩者很多技術、概念是一樣的。
2.1、運行時(CLR)
公共語言運行時 (Common Language Runtime,CLR), CLR 本質上就是.NET 虛擬機(類似Java的虛擬機JVM),算是.NET的引擎,用來執行託管.NET代碼,確切的說是編譯後的IL代碼。提供管理內存、線程執行、代碼執行、代碼安全驗證、異常處理、編譯、垃圾回收等運行時服務。
圖來源:clr-full-form
- 類加載器(Class Loader):加載程序集的類(包括方法)、元數據,及其他程序所需組件。
- 即時編譯器JIT(Just-In-Time,簡稱JIT ):負責將中間代碼MSIL翻譯成本機執行代碼(MSIL to Native Code)。
- 代碼管理器(Code Manager):管理代碼的執行。
- 垃圾回收器GC(Garbage Collector):負責整個.NET運行時託管代碼的內存分配與釋放任務,它通過一定的優化算法選擇收集對象和時間,並進行自動的垃圾收集。
- 安全引擎(Security Engine):提供基於認證的安全機制,如用戶身份。
- 調試引擎(Debug Engine):使開發者能調試和跟蹤應用程序代碼。
- 類型檢查器(Type Checker):檢查並禁止非安全的類型轉換以及未初始化的變量的使用。
- 異常管理器(Exception Manager):提供結構化的異常處理,與Windows結構化異常處理機制(SHE)集成,改進了錯誤報告。
- 線程支持(Thread Support):提供了多線程編程的類和接口。
CLR是
.NET
的核心,當我們學習了基本C#語法後,想要進一步進階,就必須瞭解CLR的機制了。
2.2、CTS(通用類型系統)與CLS(通用語言規範)
.NET CLR是支持多種語言的,如C#、F#、VB等,這些語言編譯後都可以在CLR上執行,還支持不同語言的互操作,比如在C#類繼承一個VB寫的類,在C#中調用F#寫的一個方法等。
實現這種不同語言之間交互的基礎就是這些語言都遵循統一的規範和要求 —— CTS(通用類型系統),CTS定義了一套通用的數據類型系統,包括值類型、引用類型的結構。比如C#中int、VB中的Interger都是整形,對應CTS中的Int32。
CLS是CTS的子集,規定了語言編譯器必須遵循的一組規則,以便創建在 CLR 中運行的 .NET 應用程序。可以把CTS看做是規範,CLR是對CTS的具體實現。
圖來源:.NET的分層與概念
🔸CTS(Common Type System)通用類型系統
微軟制定了一個正式的規範來描述類型的定義和行爲,這就是“通用類型系統”(Common Type System,CTS)。所有.NET語言共享這一類型系統,實現它們之間無縫的互操作,比如可以在VB.NET中派生一個由C#編寫的類。
- CTS 提供了2種類型:引用類型、值類型。
- CTS 規範規定,一個類型可以包含零個或多個成員。這些成員包括:字段(Field)、屬性(Property)、方法(Method)、事件(Event)。
- CTS 指定了類型可見性規則以及類型成員的訪問規則,private、public 等。
- CTS 還爲類型繼承、虛方法、對象生存期等定義了相應的規則。
- CTS 規定:所有類型最終必須從預定義的 System.Object 類型繼承,這裏包括值類型也是從Object繼承而來的。
🔸CLS(Common Language Specifition)公共語言規範
公共語言規範(Common Language Specifition,CLS)是CTS的一個子集,從類型、命名、事件、屬性等方面對語言進行了共性的定義及規範。CLS制定了一種以.NET平臺爲目標的語言所必須支持的最小特徵,以及該語言與其他.NET語言之間實現互操作性所需要的完備特徵。例如,CLS並不去關心一種語言用什麼關鍵字實現繼承,只是關心該語言如何支持繼承。
📢CLS 遵從性的規則僅適用於組件的公共接口,而非其私有實現。CLS規範是提交給ECMA組織管理的, 有關規則的完整列表,請參閱 ECMA-335 標準:公共語言基礎結構。
符合 CLS 的類型 | 描述 |
---|---|
Byte | 8 位無符號整數 |
Int16 | 16 位帶符號整數 |
Int32 | 32 位帶符號整數 |
Int64 | 64 位帶符號整數 |
Half | 半精度浮點值 |
單精度 | 單精度浮點值 |
雙精度 | 雙精度浮點值 |
布爾值 | true 或 false 值類型 |
Char | UTF 16 編碼單元 |
小數 | 非浮點十進制數字 |
IntPtr | 平臺定義的大小的指針或句柄 |
字符串 | 零個、一個或多個 Char 對象的集合 |
2.3、DotNET Framework 類庫(FCL/BCL)
類庫(Framework Class Library,FCL)就是.NET Framework
內置的各種組件服務,如ASP.NET、MVC、WCF和WPF等組件,滿足不同編程應用場景的需求。
基礎類庫BCL(Base Class Library)是FCL的一個子集,顧名思義就是一些比較基礎、通用的類庫,如基本數據類型、集合、線程、安全、字符串操作、網絡操作、IO、XML操作等等,大多都包含在System命名空間下,如System.Text
、System.IO
。其他一些常用的名詞,如核心 .NET 庫、框架庫、運行時庫、共享框架,大多都指的是BCL。
// 這些都是DotNET內置的類庫
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading.Tasks;
BCL作爲FCL的基礎,使用了CTS 數據類型和標準的應用程序格式編制,能被任何一種 .NET 編程語言的應用程序所使用。
2.4、語言&運行機制
.NET是爲了支持多種語言而設計的,如Microsoft自己發佈的VB.NET、Managed C++、C#、J#和JScript.NET,還有其他廠商開發的語言,如Cobol、Smalltalk、Perl和 Eiffel等幾十種編程語言。
無論使用哪種語言來編寫源代碼,都會通過編譯器編譯成中間代碼MSIL(Microsoft Intermediate Language)。語言的集成性主要是公共語言規範(CLS)和通用類型系統(CTS)一起確保了語言的相互操作性。CLS是一個最低標準集,所有面向.NET的編譯器都必須支持它,每個語言都符合這個規範,從而滿足了語言的互相調用和互操作。
.NET語言程序運行的邏輯如下圖:
每種語言都有自己的編譯器,將源代碼編譯成中間語言(MSIL,或IL),然後在CLR上運行,主要分爲兩個階段:
- 編譯階段:由MSBuild把源代碼編譯爲中間語言IL代碼,編譯後就是EXE、DLL格式的文件。
- 運行階段:CLR把中間語言CIL代碼編譯爲平臺專用的機器代碼,最終在CPU上運行的就是機器碼(彙編代碼)。
🚩Microsoft中間語言(MSIL),也稱爲通用中間語言(CIL/IL:Common Intermediate Language),是一組與平臺無關的指令,在CLR中運行時由JIT按需編譯爲機器碼執行。
下圖爲一個打印hello world
的IL代碼,通過內置工具ildasm
可以查看。
03、.NET Core 框架
.NET Core是一個免費、跨平臺、開源的開發平臺,用於一站式構建不同類型的應用程序。.NET Core 是以.NET Framework 爲基礎,但是經過重新設計、實現的的新一代框架,實現了原.NET Framework 中的幾乎所有功能,核心特點就是開源、跨平臺。
- 開源,採用MIT和Apache協議作爲開源協議,對商業十分友好。
- 跨平臺,支持Windows、MacOS、Linux,支持x64,、x86、ARM架構。
- 友好通用,除了跨平臺,.NET Core通過.NET Standard與.NET Framework、Xamarin和Mono兼容,支持WEB、移動、桌面、微服務容器、雲端Azure、物聯網IOT、機器學習、遊戲Unity等多種應用開發模型。
- 支持多種語言,C#、VB、F#,基於一致的API標準模型——.NETStandard,使得不同語言的程序集和庫可共享通用。
- 現代高效:結合C#8+、VS2019+,提供現代化的語言框架、高效的開發體驗。
- 高性能,根據 TechEmpowers 發佈的一份報告,.NET Core比其他同類框架都要快得多。
- 輕量,.NET Core可以打包在應用程序中,也可以安裝在並行用戶、機器範圍內或服務器上,可以部署在Docker容器中。
📢.NET Core 從2016年發佈首個
.NET Core1
,後面陸續發佈了.NET Core2、.NET Core3,及後續的.NET6、.NET7、.NET8、.NET9。
- 跳過了版本號4.x,以避免與 .NET Framework 4.x 混淆。
- 從.NET5開始,名稱中刪除了“ Core”,以強調這是.NET未來的主要實現。
- ASP.NET Core 5.0 基於 .NET 5.0,但保留名稱“ Core”以避免將其與 ASP.NET MVC 5 混淆。同樣,Entity Framework Core 5.0保留名稱“ Core”以避免將其與 Entity Framework5、Entity Framework6 混淆。
3.1、統一的.NET框架
.NET框架體系經過多年發展,衍生了多個版本 —— 使用 .NET Framework 來構建 Windows 桌面應用程序,使用 Xamarin 來構建 iOS 或 Android 應用程序,使用 .NET Core 來構建跨平臺的 Web 應用程序。每一個框架都有自己的BCL、運行時CLR,長此以往,這也是造成如今.NET市場越來越差的原因之一。
so,爲解決這個問題,.NET Core就肩負了這個一統江湖的使命!
- .NET 3 添加了對WinForm、WPF、EF的支持。
- .NET 5統一了Mono和.NET Core BCL的代碼庫。
- 在.NET 6中,運行時和工具也統一了,完成了One .NET願景。
- .NET 7 統一了所有不同的 .NET 開發工具組件,使開發人員能夠在相同的基礎類庫 (BCL)、運行時和編譯器上構建所有類型的應用(桌面、移動、Web 等)。
從.NET5,到.NET7,統一的願景基本已達成,一站式構建 Web、桌面和移動等應用,支持傳統的WPF、Winfrom(當然這兩者只限於Windows系統),還引入了.NET Multi-platform App UI (.NET MAUI)作爲Xamarin Forms的繼任者。
3.2、.NET Core體系結構
- 運行時.NET Runtime 有兩種,CoreCLR,功能和.NET Framework的CLR差不多;
.NET Native RunTime
(CoreRT/NativeAOT)是直接將C#代碼編譯爲機器碼的運行時,還只是一個實驗性的運行時。
🚩Core CLR 是一個跨平臺的運行時,移植了 .NET Framework 的 CLR 的功能,包含核心程序庫 mscorlib、JIT 編譯器、垃圾收集器 (GC) 以及其他運行 MSIL 所需要的運行期環境。
- BCL/CoreFX,類庫,即 Base Classlibrary 基礎類,包含 File、System、Console、XML、ADO.NET、日期時間等類庫。Core FX就是.NET Core的BCL。
- App Model,一站式構建 Web、桌面和移動等應用的模型。
3.3、JIT、AOT編譯
📢通常情況下,我們寫的C#代碼被編譯爲中間代碼IL,在運行期間由CLR的JIT編譯器編譯爲機器碼執行。這樣勢必造成運行的一些延遲,如果知道目標平臺,則可以爲該目標平臺提前編譯爲機器碼,這就是所謂的提前編譯(AOT),它的優點是啓動時間更快。
- JIT(Just In Time Compiler,即時編譯),顧名思義,在需要(運行代碼)的時候纔會被編譯爲機器碼。當然編譯好後會被緩存,以便於後續執行,這也是爲什麼.NET程序預熱後執行更快的原因,不過程序關閉就沒了。
- AOT編譯(Ahead of Time Compilation,預先編譯或靜態編譯),在構建(發佈)時將高級語言編譯爲本地機器碼,讓程序更快的啓動、運行。可以將.NET Core程序編譯成原生(機器)代碼,不依賴 .NET 運行時而運行在宿主機器上。
CoreRT 是應用了AOT編譯的.NET本地運行時,是微軟2014年推出的一項實驗性技術,現在被庫runtimelab取代,是一個NativeAOT的實驗性運行時。
不同於CoreCLR,CoreRT不是虛擬機,也沒有生成和動態運行代碼的能力,因爲它不包括JIT。它具有RTTI(運行時類型標識)和反射的能力,同時還具備垃圾回收(Garbage Collector)功能。Core RT 會在不同的平臺使用不同的 AOT 技術:
- Windows 上使用的是 .NET Native。
- macOS 與 Linux 上使用的是 LLILC (同時支持 JIT 和 AOT)。
04、.NET Framework vs .NET Core
4.1、對比vs
比較 | .NET Core | .NET Framework |
---|---|---|
歷史 | 2016年,.NET Core 是 .NET 的最新實現。 | 2002年,.NET Framework 是 .NET 的第一個實現 |
開源 | 完全開源 | 部分組件是開源的 |
維護團隊 | .NET基金會(.NET Foundation) | 微軟.NET團隊 |
跨平臺 | 支持跨平臺,Windows,Linux和macOS | 僅Windows平臺 |
第三方支持 | 有大量的第三方包,但少於.NET Framework | 歷史悠久,有許多第三方軟件包、庫可用 |
應用內部署 | 支持In-app模式部署 | 需要單獨安裝SDK,不支持打包到應用內 |
移動開發 | 支持,Xamarin、MAUI | 不支持 |
性能和可擴展性 | 更高性能和可伸縮性 | 一般,性能和可伸縮性方面效率較低 |
微服務實施 | .NET Core 支持微服務的實現 | 不支持 |
REST 服務實現 | 可以使用 .NET Core 創建一個 REST API。 | 它支持 REST API 服務實現 |
何時使用 | 🔸 創建跨平臺應用程序。- 要創建微服務,一定要使用 .NET Core。 🔸 將應用程序部署到 Dockers 容器。 🔸 創建高性能且可擴展的應用程序。 🔸 並行運行多個 .NET 版本,請選擇 .NET Core。 🔸 如果你想要一個命令行界面(CLI)控制,那麼.NET core是最好的選擇。 |
🔸 🔸 🔸 .NET Core 不支持的第三方包。 🔸 不適用於 .NET Core 的 .NET 技術。 🔸 Core 有NUGET 包可用 |
參考原文:
- .NET Framework Vs .NET Core Vs .NET Standard,2021年9月的文章,那時.NET5還沒發佈的。
- .NET Core vs .NET Framework
4.2、被遺棄的功能
.NET Framework 中有一些技術在 .NET 中已經廢棄或調整了:
- 🟠 Windows相關API不支持:
.NET Framework
是深度集成Windows系統的,而.NET Core
是跨平臺的,因此就有大量的系統相關的API不支持。- Windows 兼容性包 的 Nuget包“Microsoft.Windows.Compatibility”提供了約 20,000 個 API,包括WCF、ACL、Windows加密、WMI、EventLog、註冊表、Windows服務等,及一些跨平臺 API。
- Windows 註冊表可通過Nuget查找“Microsoft.Win32.Registry”代替,其他如果在項目中發現缺少引用,請搜索 NuGet。
- 🟠 Web 瀏覽器控件:桌面開發中的瀏覽器控件,之前是基於IE內核的,已經過時。新提供的 Microsoft.Web.WebView2 可以通過Nuget獲得。
- 🟠 應用配置 App.config 升級爲 appsettings.json,如果還想要用,則可添加
System.Configuration.ConfigurationManager
NuGet 包。 - 🟠 應用程序域 (AppDomain) ,不支持創建其他應用域,也尚未計劃在將來添加此功能。 對於代碼隔離,將流程或容器用作備用。 若要動態加載程序集,請使用 AssemblyLoadContext 類。
- 🟠 .NET Remoting,.NET 6 及更高版本不支持 .NET 遠程處理。對於簡單的跨進程通信,可將進程間通信 (IPC) 機制視爲遠程處理的備用方案。對於跨計算機的通信,可將基於網絡的解決方案用作備用方案。
- 🟠 不支持 System.EnterpriseServices (COM+)。
- 🟠 代碼訪問安全性,WPF for .NET 刪除與 CAS 相關的代碼,公開定義的 CAS 相關類型被移出 WPF 程序集,並移入了 Core .NET 庫程序集中。
- 🟠 Windows Workflow Foundation (WF) 和 Windows Communication Foundation (WCF),在.NET 5 及更高版本不支持 WF 和 WCF, 有關替代方法,請參閱 CoreWF 和 CoreWCF。
- 🟠 保存反射生成的程序集,.NET 6 及更高版本不支持保存由 System.Reflection.Emit API 生成的程序集,作爲替代方法,請考慮 ILPack 庫。
更多請參考:
📢 爲了保障兼容性,.Net Core 依然是可以調用 .NET Framework 的庫,只是如有有不支持的API或依賴會拋出異常。
4.3、桌面開發能用.NET Core嗎?
開發服務端後臺服務肯定是首選.NET Core的,那傳統的的Windows桌面程序(WinForm、WPF)呢?能不能用最新的.NET Core呢?—— 答案當然是可以的!
🟢優點:
- 可以使用更新的C#語法、.NET特性,提升開發效率。
- 性能提升明顯。
- 可以打包運行庫的依賴,不用單獨安裝運行庫了。
- WebView2,基於Edge的現代瀏覽器內核。
🟠缺點:
- .NET Framework配套的第三方庫比較豐富,可能沒有.NETCore版本的。
- 對操作系統的兼容,.NETFramework4支持XP系統,Core最低支持Win7。
📢儘管 .NET Core 是跨平臺的,但其 WPF、Wiform 僅在 Windows 上運行!
從 .NET Framework 升級到 .NET Core VS2022內置的升級工具,相關參考:
- 如何將 WPF 桌面應用升級到 .NET 7
- 如何將 Windows 窗體 桌面應用升級到 .NET 7
- 從 .NET Framework 移植到 .NET,基本都可以兼容,99%的API都是一樣的
- 桌面指南 (WPF .NET)
🚩不要升級 Visual Basic Windows 窗體項目。 擴展似乎存在 bug!
05、還有一些概念瞭解一下?
- 🔸.NET應用:就是使用了.NET框架開發的應用程序,基於CLR運行。
- 🔸Assembly: 程序集,源代碼編譯的產出,一般表現爲
.DLL
或者.EXE
格式,必須依靠CLR才能順利執行。它們都是標準的PE格式的文件,主要包括PE(Portable Executable)頭、CLR頭(託管代碼的一些信息,如類型元數據)、IL代碼、其他資源數據。
- 🔸DLL:Dynamic Link Library,動態鏈接庫,包含了已編譯的C#代碼、元數據和資源,可以在多個應用程序之間共享和重用。
- 🔸命令行 (CLI:Command-Line Interface) 是一種跨平臺工具,用於開發、構建、執行發佈 .NET 應用程序。是.NET Core SDK的一部分,可以用“dotnet”指令來檢查是否正確安裝。
- 🔸MSBuild Microsoft Build Engine)是由Microsoft開發的構建工具和構建系統。它用於自動化軟件項目的構建過程,包括編譯源代碼、打包、運行測試、部署和生成文檔等。使用 MSBuild,我們可以構建Visual Studio項目和解決方案,而無需安裝Visual Studio IDE。
5.1、託管代碼和非託管代碼
託管代碼(Managed Code)是指在受管理環境中運行的代碼,通常指的是.NET語言(C#、VB)開發的代碼,在CLR運行時環境中運行。由CLR來負責內存管理、垃圾回收、類型安全性和異常處理等任務,所以我們寫(C#)託管代碼時,就可以隨意申明變量、創建對象,而不用去管內存的分配、管理和回收,使得代碼更容易編寫、維護和調試。
🚩Java也算一種託管代碼
相對而言,非託管代碼(Unmanaged Code)就是沒有專門的執行管理環境,通常使用低級編程語言(如C、C++)編寫,開發人員需要手動處理內存管理、異常和資源釋放等問題。
📢在實際的C#的開發中,我們也會經常用到非託管資源,如IO、文件流操作,就需要注意要手動釋放(非託管)資源,避免內存溢出。
5.2、.NET Standard
.NET Standard 是針對多個.NET
框架 實現推出的一套正式的 .NET API 規範,目的是在多個.NET
框架間共享代碼,如在.NET Framework 、 .NET、Mono間共享代碼,提高 .NET 生態系統中的一致性。
🚩.NET Standard 是一組標準化的 API規範,“.NET Standard Library”指的也是這個API標準庫,注意只是一組規範,具體實現就是 .NET Framework、NET Core 和 Mono了,看看其源碼就知道了。
所以:
.NET Standard
是針對跨平臺框架的一種規範,在跨平臺框架開發是纔會涉及。- 從 .NET 5 和 .NET 6 開始,微軟就統一了所有平臺、應用終端,不再需要
.NET Standard
了,它以後不會更新了。 - 對於
.NET Framework
,在4.5版本才正式支持.NET Standard
的規範,.NET Core
天生就支持了。
5.3、.NET的ECMA標準
ECMA(European Computer Manufacturers Association,歐洲計算機制造商協會)是一個國際性的標準化組織,致力於制定和推廣信息和通信技術的標準。
.NET體系中的C#語言、公共語言基礎(CLI)也是有標準規範的,參考Ecma 標準。.NET主要的的規範標準包括:
- C# 語言標準(版本 6.0):ECMA-334.pdf
- 公共語言基礎結構:ECMA-335.pdf,這也是CLR的標準。
🔸CLI(Common Language Infrastructure)公共語言基礎結構:是一系列規範標準的總稱,包括CTS、CLS、CIL、元數據、執行系統等多種規範,.NET、Mono就是他的實現,由國際標準組織ECMA維護。
📢學習C#、CLR不需要去看上述規範,這個不適合,如果你是要自己實現一門高級語言,或寫一個C#編譯器則可以去看看。
5.4、Mono/Xamarin
Mono 是另一個 .NET Framework 的跨平臺開源版本,並不屬於微軟,而是由社區的力量所主導。Mono 項目始於 2001 年,由Xamarin牽頭維護 mono/mono ,2016年Xamarin被微軟收購,之後逐步成爲.NETCore的一部分。
Mono就像流落民間的王子,靠着鄉親們的力量慢慢成長,最後被國王召回,繼承大統。
Mono 基於C#的ECMA標準和公共語言運行時(CLR),包括Mono運行時、C#編譯器、類庫和一些附加工具。Mono兼容.NET標準,並支持跨平臺開發。可以在多個操作系統上運行,包括Linux、macOS和Windows。Mono比較流行的應用場景就是Unity遊戲開發和移動端應用開發。
- Unity遊戲引擎使用Mono作爲其腳本引擎的一部分,所以Unity遊戲開發的主要語言就是C#。
- Xamarin(雜麼瑞):就是基於Mono,專門用來開發移動端App應用程序,實現一次開發多端應用。其繼任者是微軟在.NET7中推出的MAUI(maui /ˈmaʊɪ/ n.毛伊島)。
參考資料
- #️⃣C#DotNet資料導航
- .NET平臺系列2 .NET Framework 框架詳解,張傳寧-不錯的系列:.NET平臺系列目錄
- .NET Framework 版本和依賴關係,microsoft文檔
- C# 發展歷史,microsoft文檔
- 語言獨立性和與語言無關的組件,microsoft文檔
- The Ultimate .NET Version Guide,YouTube視頻
- 各版本操作系統對.NET支持情況
- Introduction to .NET and .NET Core Framework,.NET面試題英文版
- 通俗易懂,什麼是.NET?什麼是.NET Framework?什麼是.NET Core?
- Understanding the .NET ecosystem: The evolution of .NET into .NET 7
- .NET Interview Questions,有非常多的.NET相關問題資料
- .NET Versions Explained - .NET, .NET Core, .NET Standard, .NET Framework and more
©️版權申明:版權所有@安木夕,本文內容僅供學習,歡迎指正、交流,轉載請註明出處!原文編輯地址-語雀