微軟.net core目前已更新至3.0版本,其技術(shù)風(fēng)險(xiǎn)已經(jīng)比較低嚷节,今天對相關(guān)其技術(shù)特性做一個(gè)簡單的介紹。
.NET Core的特點(diǎn):
·跨平臺:可在 Windows、macOS 和 Linux 操作系統(tǒng)上運(yùn)行远寸。
·跨體系結(jié)構(gòu)保持一致:在多個(gè)體系結(jié)構(gòu)(包括 x64、x86 和 ARM)上以相同的行為運(yùn)行代碼屠凶。
·命令行工具:包括可用于本地開發(fā)和持續(xù)集成方案中的易于使用的命令行工具驰后。
·部署靈活:可以包含在應(yīng)用或已安裝的并行(用戶或系統(tǒng)范圍安裝)中。 可搭配Docker 容器使用矗愧。
·兼容性:.NET Core 通過 .NET Standard 與 .NET Framework灶芝、Xamarin 和 Mono 兼容。
·開放源代碼:.NET Core 平臺是開放源代碼贱枣,使用 MIT 和 Apache 2 許可證监署。.NET Core 是一個(gè).NET Foundation 項(xiàng)目。
·由 Microsoft 支持:.NET Core 由 Microsoft該項(xiàng)目提供支持纽哥。
語言
可以使用 C#钠乏、Visual Basic 和 F# 語言編寫適用于.NET Core 的應(yīng)用程序和庫。這些語言可在你喜歡的文本編輯器或集成開發(fā)環(huán)境 (IDE) 中使用春塌,包括:
Visual Studio
Visual Studio Code
Sublime Text
Vim
這種集成部分由OmniSharp和Ionide項(xiàng)目的參與者提供晓避。
API
.NET Core 公開了多種方案的 API,以下介紹了幾種:
基元類型只壳,例如bool和int俏拱。
集合,例如System.Collections.Generic.List和System.Collections.Generic.Dictionary吼句。
實(shí)用類型锅必,例如System.Net.Http.HttpClient和System.IO.FileStream。
數(shù)據(jù)類型,例如 System.Data.DataSet和DbSet搞隐。
高性能類型驹愚,例如 System.Numerics.Vector和Pipelines。
.NET Core 通過實(shí)現(xiàn) .NET Standard 規(guī)范提供 .NET Framework 和 Mono API 的兼容性劣纲。
框架
在.NET Core 之上建立了多個(gè)框架:
ASP.NET Core
Windows 10 通用 Windows 平臺 (UWP)
Tizen
撰寫
.NET Core 包括以下部分:
.NET Core 運(yùn)行時(shí):提供類型系統(tǒng)逢捺、程序集加載、垃圾回收器癞季、本機(jī)互操作和其他基本服務(wù)劫瞳。.NET Core 框架庫:提供基元數(shù)據(jù)類型、應(yīng)用編寫類型和基本實(shí)用程序绷柒。
ASP.NET 運(yùn)行時(shí):提供一個(gè)框架來生成基于云且連接到 Internet 的新式應(yīng)用程序志于,例如 Web 應(yīng)用、IoT 應(yīng)用和移動(dòng)后端辉巡。
.NET Core CLI 工具和語言編譯器(Roslyn 和 F#):提供 .NET Core 開發(fā)人員體驗(yàn)恨憎。
dotnet 工具:用于啟動(dòng) .NET Core 應(yīng)用和 CLI 工具。 它選擇運(yùn)行時(shí)并托管運(yùn)行時(shí)郊楣,提供程序集加載策略并啟動(dòng)應(yīng)用和工具憔恳。
這些組件采用以下方式分布:
.NET Core 運(yùn)行時(shí) -- 包括 .NET Core 運(yùn)行時(shí)和框架庫。
ASP.NET Core 運(yùn)行時(shí) -- 包括 ASP.NET Core 和 .NET Core 運(yùn)行時(shí)以及框架庫净蚤。
.NET Core SDK -- 包括 .NET CLI 工具钥组、ASP.NET Core 運(yùn)行時(shí)以及 .NET Core 運(yùn)行時(shí)和框架。
開源
.NET Core是開源的(MIT 許可證)今瀑,由 Microsoft 于 2014 年提供給 .NET Foundation程梦。它現(xiàn)在是最活躍的 .NET Foundation 項(xiàng)目之一。個(gè)人和公司可出于個(gè)人橘荠、學(xué)術(shù)或商業(yè)等目的對其進(jìn)行使用屿附。許多公司將 .NET Core 用作應(yīng)用、工具哥童、新平臺和托管服務(wù)的一部分挺份。其中某些公司在 GitHub 上為 .NET Core 做出了巨大貢獻(xiàn),并作為.NET Foundation Technical Steering Group(.NET Foundation 技術(shù)控制組)的成員為產(chǎn)品方向提供指導(dǎo)贮懈。
針對適應(yīng)性而設(shè)計(jì)
經(jīng)過構(gòu)建匀泊,.NET Core 與其他 .NET 產(chǎn)品非常相似,但也存在獨(dú)特性朵你。 它旨在實(shí)現(xiàn)對新平臺和工作負(fù)荷廣泛的適應(yīng)性各聘,還提供了多個(gè) OS 和 CPU 端口(且可能會(huì)移植到更多端口上)。
該產(chǎn)品分為幾個(gè)部分抡医,使各個(gè)部件能夠在不同的時(shí)間適應(yīng)新的平臺躲因。 必須將運(yùn)行時(shí)和特定于平臺的基礎(chǔ)庫作為一個(gè)單元進(jìn)行移植。 與平臺無關(guān)的庫應(yīng)在所有平臺上按照構(gòu)建的原樣運(yùn)行。 在減少特定于平臺的實(shí)現(xiàn)來提高開發(fā)人員效率方面存在項(xiàng)目偏差毛仪,但每當(dāng)可以此方式全部或部分實(shí)現(xiàn)算法或 API 時(shí)搁嗓,都應(yīng)首選與平臺無關(guān)的 C# 代碼。
人們經(jīng)常會(huì)問箱靴,為支持多個(gè)操作系統(tǒng)應(yīng)如何實(shí)現(xiàn) .NET Core。 他們還會(huì)問是否存在單獨(dú)的實(shí)現(xiàn)荷愕,或是否使用 conditional compilation(條件編譯)衡怀。 這兩者都在用,但強(qiáng)烈偏向條件編譯安疗。
可以在下面的圖表看出大多數(shù) CoreFX 都是與平臺無關(guān)的代碼抛杨,該代碼可在所有平臺共享。 不限平臺的代碼可實(shí)現(xiàn)為在所有平臺上使用的單個(gè)可移植程序集荐类。
Windows 和 Unix 實(shí)現(xiàn)大小相似怖现。
Windows 的實(shí)現(xiàn)范圍更廣,這是因?yàn)?CoreFX 會(huì)實(shí)現(xiàn)某些僅適用于 Windows 的功能(如 Microsoft.Win32.Registry)玉罐,但尚未實(shí)現(xiàn)很多僅適用于 Unix 的概念屈嗤。你還將發(fā)現(xiàn)大多數(shù) Linux 和 macOS 實(shí)現(xiàn)都跨 Unix 實(shí)現(xiàn)共享,而特定于 Linux 和 macOS 的實(shí)現(xiàn)大小大致相同吊输。
.NET Core 中既存在平臺特定的庫饶号,也存在與平臺無關(guān)的庫。
可以查看幾個(gè)示例中的模式:
CoreCLR是特定于平臺的季蚂,它建立在內(nèi)存管理器和線程計(jì)劃程序等操作系統(tǒng)子系統(tǒng)的基礎(chǔ)上茫船。
考慮到每個(gè)OS上的存儲和加密API 都有所不同,System.IO和System.Security.Cryptography.Algorithms是特定于平臺的扭屁。
考慮到它們是通過數(shù)據(jù)結(jié)構(gòu)創(chuàng)建和操作算谈,System.Collections和System.Linq是與平臺無關(guān)的。
與其他 .NET 實(shí)現(xiàn)比較
通過將 .NET Core 與現(xiàn)有的 .NET 實(shí)現(xiàn)進(jìn)行比較料滥,可能更容易了解其大小和形狀然眼。
與 .NET Framework 比較
.NET 由 Microsoft 于 2000 年首次發(fā)布,而后發(fā)展至今幔欧。近20年以來罪治,.NET Framework 一直是 Microsoft 出品的主要 .NET 實(shí)現(xiàn)。
.NET Core 和 .NET Framework 的主要差異在于:
應(yīng)用模型-- .NET Core 并非支持全部 .NET Framework 應(yīng)用模型礁蔗。 具體而言觉义,它不支持 ASP.NET Web 窗體和 ASP.NET MVC,但支持 ASP.NET Core MVC浴井。 自 .NET Core 3.0 起晒骇,.NET Core 還支持 WPF 和 Windows 窗體(僅限在 Windows 上)。
API-- .NET Core 包含 .NET Framework 基類庫的一個(gè)大型子集,但具有不同的組成要素(程序集名稱不同洪囤;類型上公開的成員在關(guān)鍵用例中不同)徒坡。在某些情況下,這些差異要求進(jìn)行更改瘤缩,以將源移植到 .NET Core 中(可參閱.NET 可移植性分析器喇完;.NET Core 實(shí)施;.NET Standard API 規(guī)范)剥啤。
子系統(tǒng) -- .NET Core 實(shí)現(xiàn) .NET Framework 中子系統(tǒng)的子級锦溪,目的是實(shí)現(xiàn)更簡單的實(shí)現(xiàn)和編程模型。例如府怯,不支持代碼訪問安全性 (CAS)刻诊,但支持反射。
平臺-- .NET Framework 支持 Windows 和 Windows Server牺丙,而 NET Core 還支持 macOS 和 Linux则涯。
開源-- .NET Core是開源的,而.NET Framework 的只讀子集是開源的冲簿。
雖然 .NET Core是唯一的且與 .NET Framework 和其他 .NET 實(shí)現(xiàn)大不相同粟判,但可使用源或二進(jìn)制共享技術(shù)在這些實(shí)現(xiàn)之間輕松共享代碼。
由于 .NET Core 支持并行安裝及其運(yùn)行時(shí)完全獨(dú)立于 .NET Framework民假,它可以安裝在裝有.NET Framework 的計(jì)算機(jī)上浮入,不會(huì)出現(xiàn)任何問題。
與 Mono 比較
Mono是 .NET 的原始跨平臺羊异。它一開始是用作 .NET Framework 的開放源代碼替代項(xiàng)事秀,之后隨著 iOS 和 Android 設(shè)備變得流行,過渡到面向移動(dòng)設(shè)備野舶∫准#可將它看作是 .NET Framework 的社區(qū)克隆。Mono 項(xiàng)目團(tuán)隊(duì)依賴于 Microsoft 發(fā)布的開放.NET 標(biāo)準(zhǔn)(尤其是 ECMA 335)來實(shí)現(xiàn)兼容性平道。
.NET Core 和 Mono 的主要差異在于:
應(yīng)用模型-- Mono 通過 Xamarin 產(chǎn)品支持部分.NET Framework應(yīng)用模型(例如Windows窗體)和其他移動(dòng)開發(fā)輔助模型(例如 Xamarin.iOS)睹欲。而.NET Core 不支持 Xamarin。
API-- Mono 使用相同程序集名稱和組成要素支持 .NET Framework API 的大型子集一屋。
平臺-- Mono支持很多平臺和 CPU窘疮。
開源-- Mono和.NET Core 兩者都使用MIT許可證,且都屬于.NET Foundation 項(xiàng)目冀墨。
焦點(diǎn)-- 最近幾年闸衫,Mono 的主要焦點(diǎn)是移動(dòng)平臺,而 .NET Core 的焦點(diǎn)是云和桌面工作負(fù)載诽嘉。
未來動(dòng)向
已宣布.NET 5 將成為 .NET Core 的下一版本且表示平臺實(shí)現(xiàn)統(tǒng)一蔚出。此項(xiàng)目旨在以幾項(xiàng)關(guān)鍵方法來改進(jìn).NET:
生成可隨處使用且提供統(tǒng)一運(yùn)行時(shí)行為和開發(fā)人員體驗(yàn)的單一 .NET 運(yùn)行時(shí)和框架弟翘。
通過充分利用 .NET Core、.NET Framework骄酗、Xamarin 和 Mono 來擴(kuò)展 .NET 的功能稀余。
根據(jù)單個(gè)基本代碼構(gòu)建開發(fā)人員(Microsoft 和社區(qū))可處理且協(xié)同擴(kuò)展,同時(shí)可改善所有方案的產(chǎn)品趋翻。
摘譯自微軟.