如果你是一名開發人員,想要進入到.NET的世界,你需要知道都有哪些可能。由于.NET Framework是..NET生态系統中最流行的技術,你可以用它來建構各種各樣的應用程式,但是最近,出現了一些新的東西,比如 .NET Core 和.NET Standard library。我們可以在項目或建構中使用它嗎?
在.NET生态系統中使用特定的技術堆棧會産生一些困惑,因為有很多選擇,比如應該使用哪種類型的運作時?在這篇文章中,我們将試圖把這些要點都說清楚。
衆所周知.NET是一個由微軟建立的開源開發平台,用于建構許多不同類型的應用程式,如:web、移動裝置、桌面、遊戲等。它由不同的工具、程式設計語言和庫組成。讓我們從.NET的曆史開始。
.NET背後的曆史
在20世紀90年代,微軟開始緻力于.NET戰略。這個政策的關鍵是包含所有的微軟産品,并在現有的産品名稱中添加.NET。在2000年代,.NET Framework被稱為下一代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和.NET Native。
- . 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生态系統由開發平台中的不同元件組成。它包含不同的運作時,例如:
- .Net Framework(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修複)。
.NET Framework通常安裝在C:\Windows\Microsoft.NET\Framework (Framework64)。在裡面,你會找到安裝了所有主要版本的檔案夾。
.NET Core
.NET Core是.NET生态系統中的一個運作時。它于2016年釋出,是開源的(https://github.com/dotnet/core)。它并不代表.NET Framework的新版本,也不會取代它。它是完全獨立的建構,允許跨平台的能力來進行應用程式開發。.NET core包括運作CLR和應用程式Host(dotnet.exe)。它有公共語言運作時(CoreCLR)和.NET core類庫。
CoreCLR使用JIT編譯和垃圾收集來運作代碼。它支援C#, VB.NET和F#,NET Core都有.NET Core類庫,其中包含了提供不同功能的類,它是.NET Framework的一個更小的子集。它支援不同類型的應用程式工作負載,例如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:\Program Files\dotnet\shared\ Microsoft.NETCore.App[版本],它們在一起。
此外,它可以建立自包含的版本,不需要在主機上安裝.NET core,因為它在結果的.exe檔案中打包了app host。缺點是部署将會更大。
?
1 | |
Mono For 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、集合等)。但是它是.NET Framework的一個子集,并不是所有的元件都被支援。
它可以運作以下工作:蘋果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 的傳統程式設計語言,具有用于建構類型安全的、面向對象的應用程式的簡單文法。
使用
什麼時候使用每個運作時。這是一個建議:
- .NET Framework應該用于:
建構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一起釋出。
|