.NET

.NET（3.1版以前稱作.NET Core）是微軟開發的第一個跨平臺 （Windows、macOS和Linux）的應用程式開發框架（Application Framework），未來也將會支援FreeBSD與Alpine平臺。.Net也是微軟在一開始發展時就開源的軟體平臺，它經常也會拿來和現有的開源 .NET平臺Mono比較。
.NET包含 .NET Framework的類別庫，但與 .NET Framework不同的是 .NET採用套件化（Packages）的管理方式，應用程式只需要取得需要的組件即可，與 .NET Framework大包式安裝的作法截然不同，同時各套件亦有獨立的版本線（Version line），不再硬性要求應用程式跟隨主線版本。
.NET專案的主要目標有 ：
# 支援或可以移轉（port）到更多的作業系統平臺與晶片架構（也就是未來計畫會跨出x86平臺）。
# 具有引人注目的效能與高可靠度。
# 開發人員能快速與直覺的獲取 .NET開發環境。
# 在直覺與具生產力的情況下建造應用程式、使用文件、範例與NuGet元件。

**歷史**
.NET Core 1.0於2016年6月27日發佈。
2020年11月，微軟發佈了 .NET 5.0，統一了.NET的各個平臺的碎片版本： .NET Framework 4.8、.NET Standard、.NET Core 3.1、Mono和Xamarin等。
2021年11月，微軟發佈了 .NET 6.0。
2022年11月，微軟發佈了 .NET 7.0。

**核心功能**
.NET是由許多專案所組成，除了基本的類別庫（Core FX）之外，也包含採用RyuJIT編譯的執行平臺Core CLR、編譯器平臺.NET Compiler Platform、採用AOT編譯技術運行最佳化的套件Core RT（.NET Core Runtime），以及跨平臺的MSIL編譯器LLILC（LLVM-based MSIL Compiler）等專案。
同時，微軟也發展了一個建置技術文件的平臺docfx ，並運用於 .NET的文件網站。

**RyuJIT**
RyuJIT是微軟發展的新式即地編譯器（Just-in-Time Compiler），用以取代現有的 .NET Framework的JIT以及JIT64即地編譯器，依據微軟公佈的測試報告，RyuJIT的效能較前一代的JIT提升約25%，並支援SIMD（Single Instruction, Multiple Data）的技術。RyuJIT同時應用於 .NET Framework 4.6以及 .NET Core。

**Core CLR**
Core CLR移植 .NET Framework的CLR的功能，包含核心程式庫mscorlib、JIT編譯器、垃圾收集器（GC）以及其他執行MSIL所需要的執行期環境。

**Core RT**
Core RT是以預先編譯為主的核心功能，在 .NET Core內稱為Core RT，在UWP則是稱為 .NET Native。
Core RT會在建造時期（非執行期）在編譯時將MSIL轉換成平臺原生的機器碼，以獲取較短的啟動時間（JIT採用的是執行時期編譯，使得啟動時間拉長），以及記憶體用量減少的優點。Core RT會在不同的平臺使用不同的AOT技術：- Windows上使用的是 .NET Native。- macOS與Linux上使用的是LLILC（同時支援JIT和AOT）。

**LLILC**
LLILC（LLVM-based MSIL Compiler，英文發音為 "lilac"）是 .NET在非Windows平臺的MSIL編譯器，基於ECMA-335（Common Language Infrastructure）的標準將MSIL編譯成原生碼執行，適用於可運行LLVM的作業系統，例如macOS與Linux作業系統。
LLILC同時支援JIT（內含RyuJIT的實作） 以及AOT（未來將開始支援）的編譯方式。

**Roslyn**
.NET Compiler Platform（專案代碼為Roslyn）是將 .NET平臺的編譯架構標準化的平臺，它可提供程式管理工具 （如整合開發環境） 相當多的情報，用以發展有助於編寫程式與管理程式結構所需要的功能，例如型別資訊、語法結構、參考連結、語意、編譯器、自動化、錯誤回報等等功能，只要是遵循CLI標準的程式語言，都可以利用 .NET Compiler Platform實作出編譯器，讓程式管理工具能實作如語法提示、語法自動完成、關鍵字高亮等視覺化能力。
.NET Compiler Platform可同時支援 .NET Framework 4.6以上版本，.NET Core也原生支援。

**套件管理**

**.NET Core v1.0時期**
.NET Core的類別庫採用NuGet套件化的架構，應用程式只需要使用project.json的dependencies區段加入指定套件版本的參考，就能獲得該套件的功能，與以往 .NET Framework大包式的提供方法完全不同。.NET Core團隊宣佈已經有98%的 .NET Framework主要類別庫移轉到 .NET Core平臺。
例如下列project.json內容，可直接加入 .NET Standard Library（v1.0.0-rc2-23901）的參考。
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"NETStandard.Library": "1.0.0-rc2-23901"
},
"frameworks": {
"netstandardapp1.5": {
"imports": "dnxcore50"
}
}
}
.NET Standard Library是一個總括型的NuGet Package，其內包含了這些類別庫套件：- Microsoft.DotNet.CoreHost- NETStandard.Platform- System.Collections.Concurrent- System.Linq- System.Runtime.Numerics- System.Text.RegularExpressions
其中的NETStandard.Platform也是一個總括型套件，包含了下列類別庫套件：- Microsoft.NETCore.Platforms- Microsoft.NETCore.Runtime- Microsoft.Win32.Primitives- System.AppContext- System.Collections- System.Diagnostics.Debug- System.Diagnostics.Tools- System.Diagnostics.Tracing- System.Globalization- System.Globalization.Calendars- System.IO- System.IO.FileSystem- System.IO.FileSystem.Primitives- System.Net.Primitives- System.Net.Sockets- System.Reflection- System.Reflection.Extensions- System.Reflection.Primitives- System.Reflection.TypeExtensions- System.Runtime- System.Runtime.Extensions- System.Runtime.Handles- System.Runtime.InteropServices- System.Runtime.InteropServices.RuntimeInformation- System.Text.Encoding- System.Text.Encoding.Extensions- System.Threading- System.Threading.Tasks- System.Threading.Timer
開發人員只需要使用NETStandard.Library就能加入所有必要的 .NET Core類別庫參考，但若不需要這麼多組件，也可以只加入特定的套件即可，不一定都要加入NETStandard.Library。

**.NET Core v1.1時期**
對於微軟來說，.NET Core 1.0（以及早期開發時）使用project.json來處理套件管理與版本相依的問題，是因為很多工具還沒趕上（例如微軟主力的建置工具MSBuild），再加上project.json/xproj架構並不相容於以MSBuild為主的工具鏈 （Toolchain），若是要修改成相容 project.json/xproj 架構的話可能會付出極大成本，因此在 .NET Core 1.0 RC2 發布不久，官方就宣佈要將project.json/xproj系統移回到以MSBuild為主的csproj ，例如下列csproj的例子即可看到套件參考的內容。

netcoreapp1.1


$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;


aspnet-MyCoolWebApplication-e119bc96-38e9-44ab-b4d3-d54964ade9b1
..\docker-compose.dcproj























由於 .NET Core移回了MSBuild架構，因此在Visual Studio 2017的 .NET Core工具內，已恢復可直接於IDE的GUI介面中編修套件參考的功能。

**應用程式類型**
.NET基於跨平臺能力，在 .NET Core 3.0之前，並沒有將與GUI高度相關的API移植到 .NET Core內，因此像是Windows Forms或是Windows Presentation Foundation（WPF）並未移植到 .NET Core。.NET支援主控臺應用程式（Console Application）以及類別庫（Class Library）類型的專案。
不過從 .NET Core 3開始，微軟在其Universal Windows Platform（UWP）開發平臺使用了 .NET，並且利用 .NET Native技術將其效能提升至十分接近原生碼的速度。
ASP.NET Core則以主控臺應用程式驅動其代管環境Kestrel Server以支援ASP.NET Core程式的執行。

**.NET CLI**
.NET CLI（Command-Line Interface）指令列工具是 .NET處理建造、執行與編輯工作的主要工具 ，有幾個主要的動作：

**與其他平臺的關係**
.NET經常會拿來與其他平臺做比較，尤其是它的源頭 .NET Framework以及另一個相似性質的開源平臺Mono。

**.NET Framework**
據微軟的說明，.NET Core和 .NET Framework是子集（Subset）與超集（Superset）的關係，.NET Core將會實作出部份的 .NET Framework功能 （基本上是不含使用者介面的部份），例如 JIT（.NET Core採用 RyuJIT）、垃圾收集器（GC）以及型別（包含基本型別以及泛型型別等）。.NET Framework與 .NET Core已經在 .NET 5及以後版本合併為統一的 .NET平臺。

**Mono**
Mono是另一個已發展許久的 .NET Framework跨平臺開源版本，起初由社群主導，並由Xamarin等技術推動了.NET跨平臺應用的開發。在.NET Core問世後，微軟逐步將跨平臺的核心功能和支持納入微軟官方的.NET生態中，最終在.NET5及以後版本將.NET Core和Mono合併至統一的.NET平臺。此後不再區分.NET Framework、.NET Core和Mono。
Mono的最後一個大版本於2024年2月發佈，之後微軟將其移交至Wine進行管理。
然而，Mono仍然具有其特定的用途，例如作為Unity遊戲引擎和Xamarin。Android/Xamarin.iOS的運行環境，因為其提供的輕量級JIT編譯和AOT（Ahead Of Time）功能。

**與ASP.NET Core的關係**
.NET Core與ASP.NET Core的關係其實一開始並不是主從關係 ，ASP.NET Core的開發初期（ASP.NET 5）.NET Core還沒有開始起跑，因此ASP.NET Core當時有自己的執行期與工具，一開始稱為Project K，後來改為DNX（.NET Execution Environment），DNX本身就具有可獨立運作的執行能力，不需要依賴 .NET Core執行，但是這樣會變成 .NET Core和ASP.NET Core雙頭馬車的現象，在 .NET Core逐漸成熟之後，微軟也決定要將這兩個各自獨立發展的產品線整合在一起，DNX也將因改用 .NET Core執行期而終止開發，DNX的功能將由 .NET Core以及旗下的 .NET CLI接替提供，整合後的版本將在1.0 RC2時釋出。

**支援作業系統**
.NET 9支援下列作業系統 ：

**參考 ==