1. 程式人生 > 實用技巧 >.NET生態系統的歷史發展

.NET生態系統的歷史發展

如果你是一名開發人員,想要進入到.NET的世界,你需要知道都有哪些可能。由於.NETFramework是..NET生態系統中最流行的技術,你可以用它來構建各種各樣的應用程式,但是最近,出現了一些新的東西,比如 .NET Core 和.NET Standard library。我們可以在專案或構建中使用它嗎?

在.NET生態系統中使用特定的技術堆疊會產生一些困惑,因為有很多選擇,比如應該使用哪種型別的執行時?在這篇文章中,我們將試圖把這些要點都說清楚。

眾所周知.NET是一個由微軟建立的開源開發平臺,用於構建許多不同型別的應用程式,如:web、移動裝置、桌面、遊戲等。它由不同的工具、程式語言和庫組成。讓我們從.NET的歷史開始。

.NET背後的歷史

在20世紀90年代,微軟開始致力於.NET戰略。這個策略的關鍵是包含所有的微軟產品,並在現有的產品名稱中新增.NET。在2000年代,.NETFramework被稱為下一代Windows服務(NGWS)。. NET框架的第一個測試版釋出於2000年代末,.NET 1.0的第一個版本釋出於2002年2月13日。從那時起,釋出了許多帶有新特性的版本。其中最重要的是:

  • . NET Framework 2.0(2005年11月):泛型集合、迭代器、可空型別等。
  • . NET Framework 3.0(2006年11月):WPF、WCF和WWF。
  • . NET Framework 3.5(2007年11月):AJAX、LINQ、ASP.NET MVC。
  • . NET Framework 4.0(2010年4月):MEF, DLR,任務並行庫,Razor檢視引擎,新的c# /VB語言特性。
  • . NET Framework 4.5(2012年8月):支援非同步、zip壓縮。
  • . NET Core 1.0(2014年11月):包含跨平臺支援的第一個版本。ASP.NET 5和.NETNative。
  • . NET Core 2.0(2017年8月):第二個版本,效能有重大改進,實現了. net標準2.0。
  • . NET Framework 4.8(2019年4月):最終版本包括JIT增強、WPF應用的高DPI增強、可訪問性改進、效能更新和安全增強。
  • . NET Core 3.0(2019年9月):效能改進,c# 8.0新特性,實現. net標準2.1。Windows桌面支援。.net Core for Windows窗體和WPF。

.NET生態系統:概述

目前,.NET生態系統由開發平臺中的不同元件組成。它包含不同的執行時,例如:

  • .NetFramework(WPF, Windows窗體,ASP.NET) -以Windows為中心。
  • .NET Core (ASP.net。NET Core,通用Windows平臺- UWP) -跨平臺,與其他版本並排工作。
  • Xamarin的Mono (IOS, OS X, Android)——跨平臺。

上面所有的執行時都實現了.net標準庫,它是.net APIs的規範,每個執行時都有實現。因此,為一個執行時建立的程式碼可以與其他執行時一起執行。

所有執行時都使用工具和基礎設施來編譯和執行程式碼。這包括語言(c#, Visual Basic),編譯器(Roslyn),垃圾收集,以及構建工具,如MS build,或(Core) CLR。

.NET執行時

在這一節中,我們將看到主要的.NET執行時:

.NET Framework

.NET Framework是一個用於在Windows上構建和執行應用程式的軟體開發框架。在這裡它是部分開源的。. NET Framework由公共語言執行時(CLR)、.NET Framework類庫和應用程式工作負載(WPF、Windows窗體和ASP.NET)組成。CLR是通用基礎設施的一部分,它可以執行程式碼,JIT,做垃圾收集(C#, VB.NET, F#)等。

由CLR管理的程式碼稱為託管程式碼。程式碼被編譯成公共中間語言(CIL)並存儲在程式集中(副檔名為.exe或.dll)。當應用程式執行時,CLR進行彙編並使用即時編譯器(JIT)將機器程式碼轉換為可以在特定計算機體系結構上執行的程式碼。

.NET framework庫包含了類、介面和型別,它們提供了一些功能,比如字串、檔案系統支援等等。它允許使用者建立不同型別的應用程式,如控制檯應用程式或Windows窗體,Windows Communication Foundation (WCF), Windows Workflow Foundation (WF), Windows Presentation Foundation (WPF), ASP.NET(表單,Web API), Azure (WebJobs,雲服務)。其中大多數都是特定於Windows平臺的,並且使用Windows API,所以它們只能在Windows平臺上工作。

如果你想要執行使用.NET Framework構建的應用程式,需要首先安裝它,儘管Windows已經安裝了一些版本。每個版本都有CLR和庫。可以同時安裝多個版本(只安裝主要版本)。小版本將覆蓋現有版本。例如,對於.NET 4.2.3:主要版本是4(新的CLR),次要版本是2(引入新特性的新庫),以及3個修訂(bug修復)。

.NETFramework通常安裝在C:\Windows\Microsoft.NET\Framework (Framework64)。在裡面,你會找到安裝了所有主要版本的資料夾。

.NETCore

.NET Core是.NET生態系統中的一個執行時。它於2016年釋出,是開源的(https://github.com/dotnet/core)。它並不代表.NETFramework的新版本,也不會取代它。它是完全獨立的構建,允許跨平臺的能力來進行應用程式開發。.NET core包括執行CLR和應用程式Host(dotnet.exe)。它有公共語言執行時(CoreCLR)和.NETcore類庫。

CoreCLR使用JIT編譯和垃圾收集來執行程式碼。它支援C#, VB.NET和F#,NET Core都有.NET Core類庫,其中包含了提供不同功能的類,它是.NETFramework的一個更小的子集。它支援不同型別的應用程式工作負載,例如ASP.NET Core (MVC和API),控制檯應用程式和UWP。UWP為執行在Windows 10上的所有裝置提供了通用的型別系統、api和應用程式模型。在.NET Core 3.0 SDK中,包含了對Windows窗體應用程式的支援,包括Windows窗體設計器。

.NET Core可以執行在不同的平臺上:Windows客戶端,伺服器,物聯網,Linux, Ubnutu, FreeBSD, Tizen, Mac OSX,並可以安裝在不同的版本,每臺機器或每一個使用者。

.NET Core 是安裝在C:\ProgramFiles\dotnet\shared\ Microsoft.NETCore.App[版本],它們在一起。

此外,它可以建立自包含的版本,不需要在主機上安裝.NET core,因為它在結果的.exe檔案中打包了app host。缺點是部署將會更大。

?
1 dotnet publish -r linux-x64 --self-contained true

  

MonoFor Xamarin

Mono是.NET 框架執行時的克隆產物。Mono創建於2001年,但Xamarin的特定部分是在2011年釋出的。它的開源地址:https://github.com/mono/mono和www.mono-project.com。微軟於2016年收購了Xamarin。使其成為.net平臺的一個完全開放原始碼的分支。它由Mono執行時和Xamarin類庫組成,可以執行IOS、OS X和Android等應用工作負載。

Mono類似於.NET Core,包括垃圾收集、JIT、AOT和對c#的完全支援。Mono AOT編譯器可以將.NET 程式碼構建為一個可以在機器上執行的原生代碼可執行檔案,就像c++程式碼一樣。Xamarin的Mono有一個類庫,支援建立應用程式(IO、集合等)。但是它是.NETFramework的一個子集,並不是所有的元件都被支援。

它可以執行以下工作:蘋果IOS應用程式,MAC OS X應用程式(桌面),Android應用程式等,並允許在這些平臺之間共享程式碼,它們作為本地應用程式執行在執行在Mono上的裝置上。每個應用程式都綁定了Mono執行時和一個類庫。沒有必要在裝置上安裝Mono。

隨著時間的推移,它擴充套件到了更廣泛的領域,比如遊戲開發,Unity和針對Xamarin的Mono長期以來一直合作在Unity中提供c#支援。

其他框架:.NET Compact Framework and .NET Micro Framework

這些是具有特定用途的特定框架。這兩個執行時都試圖提供在受限裝置(如pda、行動電話等)上執行的精簡執行時。例如,.NET Micro Framework是為資源受限的裝置構建的,這些裝置至少有256KB的flash和64KB的RAM記憶體。

Silverlight

Silverlight是一種流行的跨平臺.NET技術,它支援為瀏覽器構建豐富的媒體體驗。它於2007年釋出,具有多種功能,如播放視訊、下載媒體、建立豐富的UI和動畫等。在2015年,微軟在2021年10月決定停止對Silverlight的支援。

Community Projects

除了微軟的官方執行時,還有由社群製作的.NET執行時,如DotGNU Portable。NET, DotNetAnywhere, CosmosOS和CrossNet。它們都有不同的方法來構建這樣的框架。

.NET Standard

因為不同的執行時使用不同的類庫,例如.NET Framework使用.NET Framework類庫,而.net Core包含自己的類庫,Xamarin也有自己的類庫。這樣就很難在不同的執行時之間共享程式碼,因為它們不使用相同的API。微軟對此的解決方案是.NET標準庫,於2016年釋出。它表示一組(正式的)規範,說明可以使用哪些api以及它由所有執行時實現。它是可移植類庫(PCL)的發展。特定的執行時實現。net標準的特定版本(實現特定的api集)。例如,.NET Framework 4.6.1實現了.NET Standard 2.0 。

. NET Standard和可移植類庫(可在不同平臺上使用的類庫)之間的區別:

  • . NET Standard代表微軟定義的API集,而PCL使用的API取決於所選擇的平臺。
  • . NET Standard是平臺無關的,而PCL可以針對有限的一組平臺。

. NET Standard的每個版本都有一組api(如System.Drawing),它包含了以前版本的所有api,所以向後相容。特定的.NET 執行時版本實現特定的.NET Standard。.NET 標準的較低版本覆蓋更多的平臺,這意味著應該始終儘可能地以最低版本為目標。

工具

.NET Framework工具

對於. NET Framework工具,使用MSBuild,在Visual Studio中構建程式碼時呼叫它,或者可以從命令列呼叫它。MSBuild知道如何構建或者由誰來編譯它們。如果程式碼是c# /VB。它將呼叫.NET編譯器平臺(Roslyn)。編譯的結果是一個使用中間語言(IL)的二進位制檔案(. exe或. dll)。它可以被CLR解釋。CLR包含一個JIT編譯器,它將編譯成OS能夠理解的原生代碼。CLR有像垃圾收集器這樣的工具,可以在不需要的時候清理記憶體。

.NET Core工具

MSBuild也被用於.NET Core工具,以及.NET 編譯平臺(Roslyn)。它生成二進位制檔案(。使用中間語言(IL),它被核心公共語言執行庫(CoreCLR)使用。CoreCLR不同於.NET 框架CLR,因為它可以執行在多個框架上。它有JIT編譯器,可以將IL編譯為Windows、MacOS和Linux的原生代碼。

還有另一種方法來編譯應用程式。當UWP被編譯時,它是用AOT-Compiled 編譯的,它從IL生成原生代碼,生成可部署的包程式碼,而不是在執行時進行編譯,具有效能優勢。

CoreCLR和本機程式碼由應用程式程序(dotnet.exe)載入。

.NET Core包含了新的命令列介面,稱為dotnet cli。它允許建立新的專案。建立應用程式dotnet new。執行應用程式dotnet build。執行dotnet run或部署dotnet publish。可以嘗試使用dotnet--info檢查已經安裝了哪些sdk和執行時,以及它們安裝在哪個磁碟位置上。

Xamarin工具的Mono

MSBuild同樣用於執行構建,但僅用於C#中的檔案。如果有針對Android的C#程式碼,它是通過Xamarin編譯器和針對Android平臺編譯(IL)編譯的。然後Mono執行時作為JIT編譯器,在執行時獲取IL並生成特定於Android裝置的原生代碼。它還有執行時服務,比如垃圾收集器。

如果我們有IOS的c#程式碼,它是通過Xamarin編譯器編譯的,它為IOS預編譯並生成原生包(使用ARM組合語言)。

Xamarin也有不同的競爭對手,比如Uno平臺和Avalonia UI。還有一個來自微軟的新成員,名叫Blazor。所有這些工具主要使用WebAssembly (WASM)與C#、XAML或JavaScript相結合,讓開發者可以在瀏覽器或不同的裝置中部署應用程式。

Visual Studio IDE

Visual Studio是微軟的一個IDE,用於跨平臺構建、除錯和釋出應用程式,包括Android和iOS。Visual Studio與.NET 整合,並提供特定語言環境的特性。

Visual Studio可以在Windows和Mac上執行。有一個免費的社群版本可供使用。Mac版的Visual Studio和Windows版的Visual Studio是完全不同的環境,因為它基於MonoDevelop,用於Linux、macOS和Windows的IDE,由Xamarin公司(之前稱為Xamarin Studio)構建。

在.NET生態系統中可以使用不同種類的庫,其中大多數可以在NuGet包中找到。NuGet是一個為.NET構建的包管理器,包含超過90,000個包。

語言

不同種類的.NET應用程式可以用C#、F#或Visual Basic編寫。

C#是一種簡單的、現代的、面向物件的程式語言,它起源於C語言家族。當前版本是8.0,在.NET Core 3和.NET Standard 2.1上得到支援和。

F#是.net的一種跨平臺、開源、函數語言程式設計語言。

Visual Basic是來自Microsoft 的傳統程式語言,具有用於構建型別安全的、面向物件的應用程式的簡單語法。

使用

什麼時候使用每個執行時。這是一個建議:

  • .NETFramework應該用於:

構建Form應用程式。

不能執行跨平臺(Windows)。

  • .NET core應該被使用,如果:

構建佔用空間小的高效能應用程式。

跨平臺執行。

  • Xamarin應使用:

構建利用本機特性和跨平臺的移動應用程式。

如果你使用.NET Core,你可以使用依賴於框架的應用程式或自包含的應用程式。

如果我們選擇ASP.NET或ASP.NET Core,ASP.NET是一種更老的技術,只能在Windows上執行,但它有大量的功能和特性。ASP.NET Core可以跨平臺執行,它的設計是高效能的,可以獨立執行。它的功能和第三方庫比ASP.NET少。沒有ASP.NET Form。

關於共享程式碼的使用,我們首先需要檢查是否需要它。如果是,我們應該使用.NET 標準庫。如果不是,那麼我們在相同的執行時中共享應用程式之間的程式碼,那麼我們可以使用庫與特定的執行時。這啟用了.NET Standard中沒有的執行時特定特性。

展望未來

在2019年微軟宣佈.NET Core和.NET Framework將在.NET 5中統一。針對不同的平臺,如Windows、Linux、macOS、iOS、Android等,只有一個.NET SDK。這個框架將由一個新的.NET api、執行時功能和語言特性組成。. NET 5的主要主題之一將是. NET 以前版本的效能改進,以及RyuJIT程式碼質量、垃圾收集和JSON序列化方面的改進。.NET 5的釋出計劃是在2020年11月釋出。

此外,今年它宣佈將會有一個新的用於建立跨平臺應用程式的一流UI框架,叫做.NET MAUI。這將是Xamarin的進化。表單和將簡化開發人員的工作流程和一個專案結構到一個單一的專案,以多個平臺為目標。MAUI將於2021年11月與.NET 6一起釋出。

出處:https://www.cnblogs.com/hhhnicvscs/p/14150119.html