關於 .NET Core(.NET Core 指南)
關於 .NET Core
.NET Core 具有以下特性:
- 跨平臺: 可以在 Windows、macOS 和 Linux 作業系統上執行。
- 跨體系結構保持一致: 在多個體繫結構(包括 x64、x86 和 ARM)上以相同的行為執行程式碼。
- 命令列工具: 包括可用於本地開發和持續整合方案中的易於使用的命令列工具。
- 部署靈活: 可以包含在應用或已安裝的並行使用者或計算機範圍中。 可搭配
Docker 容器
使用。 - 相容性:.NET Core 通過.NET Standard與 .NET Framework、Xamarin 和 Mono 相容。
- 開放原始碼:.NET Core 平臺是開放原始碼,使用 MIT 和 Apache 2 許可證。 .NET Core 是一個 .NET Foundation 專案。
- 由 Microsoft 支援:.NET Core 由 Microsoft 依據 .NET Core 支援提供支援。
語言
可以使用 C#、Visual Basic 和 F# 語言編寫適用於 .NET Core 的應用程式和庫。 這些語言已整合或可以整合到你最喜歡的文字編輯器和 IDE,包括 Visual Studio、Visual Studio Code、Sublime Text 和 Vim。 這種整合部分由 OmniSharp 和 Ionide 專案的高手提供。
API
.NET Core
公開了多種方案的 API,以下介紹了幾種:
- 基元型別,例如
bool
和int
。 - 集合,例如
System.Collections.Generic.List<T>
和System.Collections.Generic.Dictionary<TKey,TValue>
。 - 實用程式型別,例如
System.Net.Http.HttpClient
和System.IO.FileStream
。 - 資料型別,例如
System.Data.DataSet
和 DbSet。 - 高效能型別,例如
System.Numerics.Vector
和 Pipelines。
.NET Core 通過實現.NET Standard
規範提供 .NET Framework
和 Mono API 的相容性。
框架
在 .NET Core 之上建立了多個框架:
撰寫
.NET Core 包括以下部分:
- .NET Core 執行時:提供型別系統、程式集載入、垃圾回收器、本機互操作和其他基本服務。 .NET Core 框架庫提供基後設資料型別、應用編寫型別和基本實用程式。
- ASP.NET 執行時:提供框架以生成基於新式雲的 Internet 連線的應用程式,例如 Web 應用、IoT 應用以及移動後端。
- .NET Core CLI 工具和語言編譯器(Roslyn 和 F#):提供 .NET Core 開發人員體驗。
- dotnet 工具:用於啟動 .NET Core 應用和 CLI 工具。 它選擇執行時並託管執行時,提供程式集載入策略並啟動應用和工具。
這些元件採用以下方式分佈:
- .NET Core 執行時 – 包括 .NET Core 執行時和框架庫。
- ASP.NET Core 執行時 – 包括 ASP.NET Core 和 .NET Core 執行時以及框架庫。
- .NET Core SDK – 包括 .NET CLI 工具、ASP.NET Core 執行時以及 .NET Core 執行時和框架。
開放源
.NET Core 屬於開放源(MIT 許可證),由 Microsoft 於 2014 年提供給 .NET Foundation。 現在它是最活躍的 .NET Foundation 專案之一。 可由個人和企業自由採用,包括用於個人、學術或商業目的。 許多公司已使用 .NET Core 作為應用、工具、新平臺和託管服務的一部分。 其中某些公司對 GitHub 上的 .NET Core 做出了巨大貢獻,並作為 .NET Foundation Technical Steering Group(.NET Foundation 技術控制組)的成員,指導產品方向。
針對適應性而設計
與其他 .NET 產品相比,生成的 .NET Core 與它們十分類似,但具有唯一性。 其目的是能夠廣泛適應新的平臺和工作負載。 它提供多個 OS 和 CPU 埠,並可以移植到更多埠。
該產品分為幾個部分,使各個部件能夠在不同的時間適應新的平臺。 必須將執行時和特定於平臺的基礎庫作為一個單元進行移植。 與平臺無關的庫應在所有平臺上按照構建的原樣執行。 對於通過減少特定於平臺的實現以提高開發人員效率方面,專案存在偏差,但每當可以以此方式全部或部分實現演算法或 API 時,都應首選與平臺無關的 C# 程式碼。
人們經常會問,為支援多個作業系統應如何實現 .NET Core。 他們還會問是否存在單獨的實現,或是否使用 conditional compilation(條件編譯)。 這兩者都在用,但強烈偏向條件編譯。
可以在下面的圖表看出大多數 CoreFX 都是與平臺無關的程式碼,該程式碼可在所有平臺共享。 不限平臺的程式碼可實現為在所有平臺上使用的單個可移植程式集。
Windows 和 Unix 實現大小相似。 Windows 具有較大的實現,因為 CoreFX 實現了某些僅適用於 Windows 的功能,如 Microsoft.Win32.Registry,但尚未實現多個僅適用於 Unix 的概念。 你將發現大多數 Linux 和 macOS 實現都是在 Unix 實現中實現的,而特定於 Linux 和 macOS 的實現大小大致相同。
.NET Core
中混合存在特定於平臺和與平臺無關的庫。 可以檢視幾個示例中的模式:
- CoreCLR 是特定於平臺的。 它建立在記憶體管理器和執行緒計劃程式等作業系統子系統的基礎上。
- 考慮到每個 OS 上的儲存和加密 API 都有所不同,System.IO 和 System.Security.Cryptography.Algorithms 是特定於平臺的。
- 考慮到它們是通過資料結構建立和操作,System.Collections 和 System.Linq 是與平臺無關的。
與其他 .NET 實現比較
將 .NET Core 與現有的 .NET 實現進行比較,這可能是瞭解其大小和形狀最簡單的方法。
與 .NET Framework 比較
.NET 由 Microsoft 於 2000 年首次釋出,而後發展至今。 近 20 年以來,.NET Framework 一直是 Microsoft 出品的主要 .NET 實現。
.NET Core 和 .NET Framework 的主要差異在於:
- 應用模型 – .NET Core 不支援所有 .NET Framework 應用模型。 具體而言,它不支援 ASP.NET Web 窗體和 ASP.NET MVC,但支援 ASP.NET Core MVC。 已宣佈 .NET Core 3 將支援 WPF 和 Windows 窗體。
- API – .NET Core 包含 .NET Framework 基類庫的一個大型子集,但具有不同的組成要素(程式集名稱不同;型別上公開的成員在關鍵用例中不同)。 這些差異需要在某些情況下更改 .NET Core 的埠源(請參閱 microsoft/dotnet-apiport)。 .NET Core 實施 .NET Standard API 規範。
- 子系統 – .NET Core 實現 .NET Framework 中子系統的子級,目的是實現更簡單的實現和程式設計模型。 例如,不支援程式碼訪問安全性 (CAS),但支援反射。
- 平臺 – .NET Framework 支援 Windows 和 Windows Server,而 NET Core 還支援 macOS 和 Linux。
- 開放源 – .NET Core 屬於開放源,而 .NET Framework 的只讀子集屬於開放源。
雖然 .NET Core 是唯一的且與 .NET Framework 和其他 .NET 實現大不相同,但使用源或二進位制共享技術在這些實施之間分享程式碼仍很簡單。
與 Mono 比較
Mono 是原始的跨平臺和 開放源 .NET 實現,於 2004 年首次釋出。 可以把它看作是 .NET Framework 的社群克隆。 Mono 專案團隊依賴於 Microsoft 釋出的開放 .NET 標準(尤其是 ECMA 335),以便實現相容性。
.NET Core 和 Mono 的主要差異在於:
- 應用模型 – Mono 通過 Xamarin 產品支援 .NET Framework 應用模型(例如,Windows Forms)和其他應用模型(例如,Xamarin.iOS)的子集。 而 .NET Core 不支援這些內容。
- API – Mono 使用相同程式集名稱和組成要素支援 .NET Framework API 的 大型子集。
- 平臺 – Mono 支援很多平臺和 CPU。
- 開放源 – Mono 和 .NET Core 兩者都使用 MIT 許可證,且都屬於 .NET Foundation 專案。
- 焦點 – 最近幾年,Mono 的主要焦點是移動平臺,而 .NET Core 的焦點是雲和桌面工作負載。
相關文章
- 關於.NET Core
- .NET Core
- 包、元包和框架(.NET Core 指南)框架
- .NET平臺系列9 .NET Core 3.0 / .NET Core 3.1 詳解
- Dapper in .Net CoreAPP
- .Net Core:限流
- .Net Core—-關於MVC中TempData持久化問題MVC持久化
- ASP.NET Core Web API 索引 (更新Redis in .NET Core)ASP.NETWebAPI索引Redis
- 【asp.net core 系列】14 .net core 中的IOCASP.NET
- 新的ASP.NET Core 遷移指南ASP.NET
- ASP.NET Core ----ASP.NET Core中使用Code FirstASP.NET
- ASP.NET 6.0 Core 遷移 ASP.NET Core 7.0ASP.NET
- .NET平臺系列24:從.NET Framework遷移到.NET Core/.NET5的技術指南Framework
- .NET Core/.NET之Stream簡介
- .Net Core(.Net6)建立grpcRPC
- .Net Core 使用SessionSession
- .net core使用RabbitMQMQ
- .net Core 使用AutoMapperAPP
- .net core Configuration物件物件
- .NET CORE命令列命令列
- .Net Core 使用 FluentValidation
- GRPC與.net coreRPC
- ASP.Net Core 3.1 使用gRPC入門指南ASP.NETRPC
- 通俗易懂,什麼是.NET Core,.NET Core能做什麼
- .NET Core基礎學習——.NET Core SDK與命令列(CL命令列
- 回顧.NET系列:Framework、Net Core、Net 過往Framework
- 【譯】.NET Core 是 .NET 的未來
- .NET Core(.NET6)中gRPC使用RPC
- 在.NET Core 中使用Quartz.NETquartz
- .Net Core實現基於Quart.Net的任務管理
- 【.NET Core】ASP.NET Core之IdentityServer4(1):快速入門ASP.NETIDEServer
- ASP.NET Core系列(二):建立第一個.Net Core 專案ASP.NET
- .net core EF Core 檢視的應用
- TDD in .NET Core - 簡介
- .NET Core容器化(Docker)Docker
- .Net Core中使用RabbitMQMQ
- .net core國際化
- .net core3.1 AutoMapperAPP