什麼是 .NET? 簡介和概觀
.NET 是免費的跨平臺 開放原始碼開發人員平臺 ,可用於建置許多種類的應用程式。 .NET 是以許多高階應用程式在生產環境中使用的高效能執行時間為基礎所建置。
雲端應用程式
跨平台用戶端應用程式
Windows 應用程式
其他應用程式類型
功能
.NET 功能可讓開發人員以生產力方式撰寫可靠且高效能的程式碼。
- 非同步程式碼
- 屬性
- 反映
- 程式碼分析器
- 委派和 Lambda
- 事件
- 例外狀況
- 記憶體回收
- 泛型類型
- LINQ (Language Integrated Query).
- 平行程式設計
- 型別推斷 - C#、F#、Visual Basic。
- 類型系統
- Unsafe 程式碼
使用 .NET
.NET 應用程式和程式庫是從原始程式碼和專案檔建置,使用 .NET CLI 或整合式開發環境 (IDE) ,例如 Visual Studio。
下列範例是最小的 .NET 應用程式:
專案檔:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
</PropertyGroup>
</Project>
原始程式碼:
Console.WriteLine("Hello, World!");
您可以使用 .NET CLI來建置並執行應用程式:
dotnet run
Hello, World!
二進位散發套件
您可以從以下位置下載 .NET:
免費的開放原始碼
.NET 是免費的,開放原始碼,而且是.NET Foundation專案。 .NET 是由 Microsoft 和 GitHub 上的社群在 數個存放庫中維護。
.NET 來源和二進位檔是使用 MIT 授權來授權。 另有其他授權套用於 Windows 的二進位散發套件。
支援
Microsoft 支援 Android、Apple、Linux 和 Windows 作業系統上的 .NET。 可用於 Arm64、x64 和 x86 架構。 模擬環境也予以支援,例如 macOS Rosetta 2。
新版 .NET 每年會在 11 月發行。 奇數年份的 .NET 版本Long-Term支援 (LTS) 版本,且支援三年。 偶數年份的版本為標準支援 (STS) 版本,支援期間為 18 個月。 這些版本的品質等級、中斷性變更原則和其他層面都相同。 如需詳細資訊,請參閱版本和支援。
Microsoft 的 .NET 小組與其他組織合作,以各種方式散發及支援 .NET。
Red Hat 支援 Red Hat Enterprise Linux 上的 .NET (RHEL) 。
Samsung 支援 Tizen 平臺上的 .NET。
執行階段
Common Language Runtime (CLR) 是建置所有 .NET 應用程式的基礎。 執行階段的基本功能如下:
- 記憶體回收。
- 記憶體安全和型別安全。
- 程式設計語言的高階支援。
- 跨平台設計。
.NET 有時稱為「Managed 程式碼」執行時間。 稱為「受控」的主因是,其使用記憶體回收行程來管理記憶體,並保證型別和記憶體安全。 CLR 會將記憶體、執行緒和例外狀況等各種作業系統和硬體概念虛擬化 (或抽象化)。
CLR 在設計上從一開始即為跨平台執行階段。 其已移植到多個作業系統和架構。 跨平臺 .NET 程式碼通常不需要重新編譯,才能在新的環境中執行。 您只需要安裝不同的執行階段來執行您的應用程式。
執行階段會為了偵錯工具、傾印和追蹤工具及可檢視性,公開各種診斷服務和 API。 可檢視性實作主要圍繞著 OpenTelemetry 建置,可進行彈性的應用程式監視和網站可靠性工程 (SRE)。
執行階段透過結合 P/Invoke、實數值型別和跨越機器碼/受控碼界限 blit 值的能力,提供低階 C 樣式 Interop 功能。
語言
執行階段的目的是支援多種程式設計語言。 C#、F# 和 Visual Basic 語言具備 Microsoft 支援,而且是與社群合力設計。
C# 是物件導向、型別安全的新式程式設計語言。 其源自於 C 系列語言,使用 C、C++、Java 和 JavaScript 的程式設計人員立刻就能上手。
F# 是通用程式設計語言,可用於撰寫簡潔、強固且高效能的程式碼。 F# 程式設計屬於資料導向,程式碼會需要使用函式轉換資料。
Visual Basic 使用較詳盡的語法,更接近一般人類語言。 對於剛接觸程式設計的人來說,可能是比較容易學習的語言。
編譯
.NET 應用程式 (以 C#) 等高階語言撰寫,會編譯成 中繼 語言 (IL) ] https://en.wikipedia.org/wiki/Common_Intermediate_Language () 。 IL 是一種精簡的程式碼格式,可在任何作業系統或架構上支援。 大部分的 .NET 應用程式都會使用多個環境中支援的 API,而只需要執行 .NET 執行時間。
IL 必須編譯為機器碼,才能在 CPU 上執行,例如 Arm64 或 x64。 .NET 支援預先 (AOT) 和 Just-In-Time (JIT) 編譯模型。
- 在 Android、macOS 和 Linux 上,JIT 編譯是預設,AOT 則可選用 (例如搭配 ReadyToRun)。
- 在 iOS 上,AOT 是必要的 (除非在模擬器中執行)。
- 在 WebAssembly (Wasm) 環境中,AOT 是必要的。
JIT 的優點是可以根據基礎作業系統和硬體,依指定環境中的 CPU 指令和呼叫慣例編譯應用程式 (未修改)。 另外,也可以較高或較低的品質層級編譯程式碼,以提供更佳的啟動和穩定狀態輸送量效能。
AOT 的優點是提供最佳的應用程式啟動,而且 (在某些情況下) 可讓部署較小。 主要缺點是必須為每個個別部署目標建置二進位檔 (與其他機器碼相同)。 AOT 程式碼與某些反映模式不相容。
執行階段程式庫
.NET 具有一組完整的標準類別庫。 這些程式庫提供許多一般用途和應用程式專用類型及公用程式功能的實作。
以下是 .NET 執行時間程式庫中定義的一些類型範例:
- 每個 .NET 類型都衍生自 型別 System.Object 。
- 基本實值型別,例如 System.Boolean 和 System.Int32。
- 集合,例如 System.Collections.Generic.List<T> 及 System.Collections.Generic.Dictionary<TKey,TValue>。
- 資料類型,例如 System.Data.DataSet 和 System.Data.DataTable。
- 網路公用程式類型,例如 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 和 Pipelines。
如需詳細資訊,請參閱執行階段程式庫概觀。
NuGet 套件管理員
NuGet 是 .NET 的套件管理員。 其可讓開發人員彼此共用編譯的二進位檔。 NuGet.org 提供來自社群的許多熱門套件。
工具
.NET SDK是一組程式庫和工具來開發和執行 .NET 應用程式。 其中包含 MSBuild 建置引擎、Roslyn (C# 和 Visual Basic) 編譯器,以及 F# 編譯器。 大多數命令是使用 dotnet
命令執行。 CLI 工具可用於本機開發和持續整合。
Visual Studio系列 IDE 提供 .NET 和 C#、F# 和 Visual Basic 語言的絕佳支援。
GitHub Codespaces 和 GitHub 安全性功能 支援 .NET。
筆記本
.NET Interactive 是一組 CLI 工具和 API,可讓使用者跨 Web、Markdown 和筆記本建立互動式體驗。
如需詳細資訊,請參閱下列資源:
CI/CD
MSBuild 和 .NET CLI 可以搭配各種持續整合工具和環境使用,例如:
如需詳細資訊,請參閱 在持續整合 (CI) 環境中使用 .NET SDK。
部署模型
.NET 應用程式可以 兩種不同的模式發佈:
- 獨立 應用程式包含 .NET 執行時間和相依程式庫。 可以是單一檔案或多個檔案。 應用程式的使用者可以在未安裝.NET 執行階段的電腦上執行該應用程式。 獨立式應用程式一律以單一作業系統和架構組態為目標。
- 架構相依 應用程式需要相容版本的 .NET 執行時間,通常是全域安裝。 架構相依應用程式可以針對單一作業系統和架構組態發佈,或發佈為「可攜式」,並以所有支援的組態為目標。
根據預設,.NET 應用程式會以原生可執行檔啟動。 作業系統和架構都會限定可執行檔。 您也可以使用 dotnet
命令啟動應用程式。
應用程式可以部署在容器中。 Microsoft 提供各種目標環境的容器映像。
.NET 歷程記錄
在 2002 年,Microsoft 發行.NET Framework,這是用來建立 Windows 應用程式的開發平臺。 目前.NET Framework版本為 4.8,Microsoft 仍可完全支援。
在 2014 年,Microsoft 將 .NET Core 引進為跨平臺、開放原始碼的後續專案,以.NET Framework。 這個 .NET 的新實作 會將名稱保留為 .NET Core 到 3.1 版。 .NET Core 3.1 之後的下一個版本名為 .NET 5。
新的 .NET 版本會每年繼續發行,每個版本號碼都較高。 其中包含重要的新功能,而且通常能夠用於新的案例。
.NET 生態系統
.NET 有多個變體,每個變體都支援不同類型的應用程式。 有多個變體的原因,一部分是因為歷史、一部分是因為技術。
.NET 實作 (歷程順序) :
- .NET Framework - 它可讓您存取 Windows 和 Windows Server 的廣泛功能。 也普遍用於以 Windows 為基礎的雲端運算。 原始 .NET。
- Mono -- .NET Framework的跨平臺實作。 原始社群和開放原始碼 .NET。 用於 Android、iOS 和 Wasm 應用程式。
- .NET (Core) -- .NET 的跨平臺和開放原始碼實作,針對雲端存留期重新購買,同時仍與.NET Framework大幅相容。 用於 Linux、macOS 和 Windows 應用程式。