關於 .NET Core(.NET Core 指南)

風靈使發表於2019-01-17

關於 .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 StudioVisual Studio Code、Sublime Text 和 Vim。 這種整合部分由 OmniSharpIonide 專案的高手提供。

API

.NET Core 公開了多種方案的 API,以下介紹了幾種:

  • 基元型別,例如 boolint
  • 集合,例如 System.Collections.Generic.List<T>System.Collections.Generic.Dictionary<TKey,TValue>
  • 實用程式型別,例如 System.Net.Http.HttpClientSystem.IO.FileStream
  • 資料型別,例如 System.Data.DataSetDbSet
  • 高效能型別,例如 System.Numerics.VectorPipelines

.NET Core 通過實現.NET Standard規範提供 .NET Framework 和 Mono API 的相容性。

框架

在 .NET Core 之上建立了多個框架:

撰寫

.NET Core 包括以下部分:

  • .NET Core 執行時:提供型別系統、程式集載入、垃圾回收器、本機互操作和其他基本服務。 .NET Core 框架庫提供基後設資料型別、應用編寫型別和基本實用程式。
  • ASP.NET 執行時:提供框架以生成基於新式雲的 Internet 連線的應用程式,例如 Web 應用、IoT 應用以及移動後端。
  • .NET Core CLI 工具和語言編譯器(RoslynF#):提供 .NET Core 開發人員體驗。
  • dotnet 工具:用於啟動 .NET Core 應用和 CLI 工具。 它選擇執行時並託管執行時,提供程式集載入策略並啟動應用和工具。

這些元件採用以下方式分佈:

開放源

.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 都是與平臺無關的程式碼,該程式碼可在所有平臺共享。 不限平臺的程式碼可實現為在所有平臺上使用的單個可移植程式集。

CoreFX:每個平臺的程式碼行數
Windows 和 Unix 實現大小相似。 Windows 具有較大的實現,因為 CoreFX 實現了某些僅適用於 Windows 的功能,如 Microsoft.Win32.Registry,但尚未實現多個僅適用於 Unix 的概念。 你將發現大多數 Linux 和 macOS 實現都是在 Unix 實現中實現的,而特定於 Linux 和 macOS 的實現大小大致相同。

.NET Core 中混合存在特定於平臺和與平臺無關的庫。 可以檢視幾個示例中的模式:

與其他 .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 的焦點是雲和桌面工作負載。

相關文章