自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

關(guān)于.NET生態(tài),你了解多少?

譯文
開發(fā) 前端
本文將系統(tǒng)性地向您介紹.NET生態(tài)中.NET Framework、.NET Core和Mono For Xamarin三大運行時的各種特點、用途與工具,并展望.NET生態(tài)的發(fā)展。

【51CTO.com快譯】如果您是一名開發(fā)人員,那么一定聽說過.NET技術(shù)吧。它是由Microsoft創(chuàng)建的開源式開發(fā)人員平臺,可用于構(gòu)建諸如:Web、移動、桌面、游戲等許多不同類型的應(yīng)用。通常,它由不同的工具、編程語言和庫所組成。其中,.NET Framework是.NET生態(tài)系統(tǒng)中最受歡迎的技術(shù)之一。近年來,.NET Core和.NET Standard Library(標(biāo)準(zhǔn)庫)也在該生態(tài)系統(tǒng)中相繼出現(xiàn)。面對這么多的技術(shù)棧,我們該如何選擇呢?下面,我們將深入探討它們的各種特點、用途與對應(yīng)工具。首先,我們從.NET的簡史開始。

.NET的發(fā)展歷史

在九十年代,Microsoft開始致力于開發(fā)名為.NET Strategy的產(chǎn)品。該策略涵蓋了所有的Microsoft產(chǎn)品線。在2000年,.NET框架被命名為下一代Windows服務(wù)(NGWS)。.NET框架的第一個beta版發(fā)布于2000年末,而.NET 1.0的第一版是在2002年2月13日發(fā)布的。下面是其后續(xù)版本及其特點:

  • .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、任務(wù)并行庫、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月):具有重大的性能改進(jìn),并實現(xiàn)了.NET Standard 2.0。
  • .NET Framework 4.8(2019年4月):包括JIT增強(qiáng)功能,針對WPF應(yīng)用的High DPI增強(qiáng)功能,可訪問性的改進(jìn),性能更新,以及安全性增強(qiáng)。
  • .NET Core 3.0(2019年9月):提供C#8.0的新功能,實現(xiàn)了.NET Standard 2.1。讓W(xué)indows桌面支持Windows Forms和WPF。

.NET生態(tài)系統(tǒng)概述

目前,包含不同運行時(runtime)的.NET生態(tài)系統(tǒng),由Microsoft開發(fā)平臺中的如下組件構(gòu)成:

  • .NET Framework(WPF、Windows Forms、ASP.NET)是以Windows為中心。
  • .NET Core(ASP.NET Core、Universal Windows Platform)是跨平臺工具,可與其他版本并行使用。
  • Mono For Xamarin(IOS、OS X、Android)同樣可以跨平臺。

上述三大運行時都實現(xiàn)了.NET Standard Library,同時它們也是.NET API的規(guī)范。因此,為某個運行時創(chuàng)建的代碼,同樣可以被其他運行時所執(zhí)行。而且所有運行時都使用工具和基礎(chǔ)架構(gòu)來編譯和運行代碼。其中涉及到的語言有C#和Visual Basic,編譯器有Roslyn,還有垃圾回收,以及諸如MS Build或(Core)CLR之類的構(gòu)建工具。

下面,我們將重點討論.NET的三大主要運行時:

.NET Framework

.NET Framework是用于在Windows上構(gòu)建和運行應(yīng)用程序的軟件開發(fā)框架。目前,它部分開源(請參見--https://github.com/microsoft/referencesource)。.NET Framework是由公共語言運行庫(Common Language Runtime,CLR)、. NET Framework類庫和應(yīng)用負(fù)載(WPF、Windows Forms和ASP.NET)所組成。其中,CLR是通用基礎(chǔ)架構(gòu)的一部分,既可以運行代碼,又可以執(zhí)行JIT(just-in-time)、以及垃圾回收(C#、VB.NET、F#)等。

由CLR管理的代碼被稱為托管代碼。這些代碼被編譯為通用中間語言(Common Intermediate Language,CIL),并存儲在擴(kuò)展名為.exe或.dll的程序集中。當(dāng)應(yīng)用程序運行時,CLR會執(zhí)行匯編,并使用JIT編譯器將機(jī)器代碼轉(zhuǎn)換為可以在特定計算架構(gòu)上運行的代碼。

.NET Framework庫包含各種功能的類、接口和數(shù)據(jù)類型(如:字符串、文件系統(tǒng)支持等)。它允許用戶創(chuàng)建不同類型的應(yīng)用程序,例如:控制臺應(yīng)用、Windows Form、Windows Communication Foundation(WCF)、Windows Workflow Foundation(WF)、Windows Presentation Foundation(WPF)、ASP.NET應(yīng)用(如:各種表單、Web API)、以及Azure應(yīng)用(如:WebJobs、Cloud Services)。不過其中大多數(shù)都僅限于Windows平臺,并使用Windows API。

雖然Windows已經(jīng)預(yù)安裝了其中的某些版本,但是如果您要運行并使用由.NET Framework生成的應(yīng)用的話,仍需要事先完成相應(yīng)的安裝。.NET Framework通常被安裝在C:\Windows\Microsoft.NET\Framework(或Framework64)上。該文件夾內(nèi)包含了所有已安裝的主要版本。

.NET Core

作為.NET生態(tài)系統(tǒng)中的一種運行時,.NET Core于2016年被發(fā)布并開源(請參見--https://github.com/dotnet/core)。它并非.NET Framework的新版本,也不會替代.NET Framework,而是被獨立地構(gòu)建出來,旨在跨平臺進(jìn)行應(yīng)用程序的開發(fā)。.NET Core由可運行CLR和Library的App Host(dotnet.exe)所組成。它擁有公共語言運行時(CoreCLR)和.NET Core Class Library。

CoreCLR使用JIT Compilation和垃圾回收來運行代碼。它支持C#、VB.NET和F#。作為.NET Framework庫的子集,.NET Core Class Library包括并提供不同的功能類。它支持不同類型的應(yīng)用負(fù)載,包括:ASP.NET Core(如:MVC和API)、各種控制臺應(yīng)用,以及UWP。其中,UWP為所有在Windows 10上運行的設(shè)備,提供了通用類型的系統(tǒng)、API和應(yīng)用模型。從.NET Core 3.0 SDK開始,它能夠支持包括Windows Forms Designer在內(nèi)的各種Windows Forms應(yīng)用。

.NET Core可以運行在不同的平臺上,其中包括:Windows客戶端、服務(wù)器端、物聯(lián)網(wǎng)、Linux、Ubnutu、FreeBSD、Tizen、Mac OSX等。.NET Core通常被安裝在C:\Program Files\dotnet\shared\Microsoft.NETCore.App[versions]中。并且,它可以根據(jù)機(jī)器或用戶的不同,實現(xiàn)多版本的并行安裝。

此外,由于.NET Core能夠?qū)?yīng)用打包到.exe文件中,因此它可以創(chuàng)建一個自包含的版本,而無需在主機(jī)上安裝.NET Core。例如,您可以運行shell命令“dotnet publish -r linux-x64 --self-contained true”。當(dāng)然,其缺點是會導(dǎo)致部署的體量變大。

Mono For Xamarin

Mono是.NET Framework運行時的一個克隆。您可以在https://github.com/mono/monowww.mono-project.com處查看到它的源代碼。微軟于2016年收購了Xamarin,并使其成為.NET平臺的完全開源分支。目前,它是由Mono運行時和Xamarin Class Library所組成,可以運行IOS、OS X和Android等應(yīng)用負(fù)載。

與.NET Core相似,Mono包含垃圾回收、JIT、AOT、以及對C#(并非VB.NET和F#)的完全支持。與C++代碼相似,Mono AOT編譯器能夠?qū)?NET代碼內(nèi)置到可以在單機(jī)上運行的可執(zhí)行文件中。同時,Mono For Xamarin具有一個支持創(chuàng)建應(yīng)用程序(可用于I/O、集合等)的類庫。

Mono For Xamarin可以被用來運行Apple IOS、MAC OS X、Android等應(yīng)用負(fù)載,而且可以在這些平臺之間共享代碼,以作為原生應(yīng)用。每個應(yīng)用程序都可以與Mono運行時、以及一個類庫捆綁在一起,而無需在設(shè)備上額外安裝Mono。

其他框架

.NET Compact Framework和.NET Micro Framework

.NET Compact Framework和.NET Micro Framework兩種框架都是通過精簡​​運行時,運行在受限制的設(shè)備(如:PDA、移動電話控制器等)上。其中,.NET Micro Framework針對的是256KB閃存和64KB內(nèi)存。

Silverlight

于2007年發(fā)布的Silverlight是一種流行的跨平臺.NET技術(shù)。它能夠為瀏覽器構(gòu)建諸如:播放與下載視頻,創(chuàng)建豐富的UI和動畫等富媒體體驗。不過,Microsoft已決定于2021年10月停止支持Silverlight。

社區(qū)項目

除了Microsoft官方提供的運行時,開發(fā)者社區(qū)也提供了諸如:DotGNU Portable.NET、DotNetAnywhereCosmosOSCrossNet.NET等運行時。它們的構(gòu)建方式略有不同。

.NET Standard

無論是.NET Framework、.NET Core還是Xamarin,不同的運行時會使用各自不同的類庫。而由于它們使用的是不同API,因此不同的運行時無法彼此共享代碼。為此,Microsoft于2016年發(fā)布了.NET Standard Library。它通過一組正式的規(guī)范,說明了各個運行時都能夠使用和實現(xiàn)的API。而特定的運行時也能夠?qū)崿F(xiàn)特定版本的.NET Standard。例如:.NET Framework 4.6.1就能夠?qū)崿F(xiàn).NET Standard 2.0。同時,它也是Portable Class Libraries(PCL)的一種發(fā)展方向。

.NET Standard和Portable Class Libraries (即,可在不同平臺上使用的庫)之間的區(qū)別是:

  • .NET Standard代表了Microsoft定義的一組API,而PCL使用的API則取決于所選擇的平臺。
  • .NET Standard與平臺無關(guān),而PCL針對的是有限的平臺集。

.NET Standard的每個版本都有一組API(如:System.Drawing),由于它們都帶有以前版本的所有API,因此能夠向后兼容。同時,那些特定的.NET運行時版本實現(xiàn)的是特定的.NET Standard版本。也就是說,較低版本的.NET Standard能夠覆蓋更多平臺。

工具類

.NET Framework工具

對于.NET Framework,您可以請使用MSBuild。它既可以在Visual Studio構(gòu)建代碼時被調(diào)用,也可以從命令行中被調(diào)用。MSBuild能夠判斷如何構(gòu)建、以及由誰負(fù)責(zé)編譯。例如:如果代碼是由C#或VB.NET編寫的,那么它將調(diào)用.NET編譯器平臺--Roslyn。而由于編譯的結(jié)果是帶有中間語言(intermediate language,IL)的二進(jìn)制文件(如:.EXE或.DLL),因此它們可以被CLR所解釋。如前所述,CLR包含了一個JIT編譯器,可以編譯出能夠被操作系統(tǒng)理解的原生代碼。而且CLR帶有垃圾收集器(Garbage Collector )之類的工具,可以按需清理內(nèi)存。

.NET Core工具

MSBuild也可以被用于.NET Core工具以及.NET Compiler Platform(Roslyn)。在使用IL生成二進(jìn)制文件時,我們可以使用Core Common Language Runtime (CoreCLR)。與.NET Framwork CLR不同的是,CoreCLR可以在多個框架上運行,并通過JIT編譯器,將IL編譯為Windows、MacOS和Linux的原生代碼。當(dāng)然,CoreCLR和原生代碼都是由應(yīng)用主機(jī)進(jìn)程--dotnet.exe進(jìn)行加載的。

而在編譯UWP時,我們可以使用AOT-Compiled(.NET Native)來進(jìn)行編譯,該編譯器從IL生成原生代碼,并將代碼作為可部署的程序包來生成,而不是在運行時進(jìn)行編譯。此法提高了整體性能。

.NET Core帶有一個被稱為dotnet cli的全新命令行界面。您可以用dotnet new來創(chuàng)建新的項目;用dotnet build來構(gòu)建應(yīng)用;用dotnet run來運行;用dotnet publish來部署。當(dāng)然,您也可以用dotnet –info來檢查SDK與運行時被安裝的位置。

Mono For Xamarin工具

在此,MSBuild再次被用于僅針對C#文件的構(gòu)建過程。例如,我們可以通過Xamarin Compiler來編譯Android設(shè)備上的C#代碼。而作為JIT-Compiler的Mono運行時,會按需生成特定于目標(biāo)Android設(shè)備的原生代碼。當(dāng)然,它也帶有垃圾收集器(Garbage Collector )之類的工具。

而對于iOS上的C#代碼,我們則可以通過Xamarin Compiler對其進(jìn)行預(yù)編譯,并使用ARM匯編語言,來生成IOS原生的軟件包。

Visual Studio IDE

Visual Studio是由Microsoft提供的IDE,可用于橫跨各種平臺(包括Android和iOS),構(gòu)建、調(diào)試和發(fā)布應(yīng)用程序。通過與.NET的集成,Visual Studio可以提供特定于語言環(huán)境的各項功能。

Windows版的Visual Studio提供一個免費的社區(qū)版。而Visual Studio for Mac則是基于Xamarin公司(前身為Xamarin Studio)的MonoDevelop來構(gòu)建的IDE。

類庫

.NET生態(tài)系統(tǒng)涉及到許多類庫,其中大多數(shù)可以在NuGet包中找到。此處的NuGet是.NET的軟件包管理器,它包含了90,000多個軟件包。

語言

我們可以用C#、F#或Visual Basic來編寫各種.NET應(yīng)用。其中:

  • C#是一種簡單、時髦的、面向?qū)ο蟮木幊陶Z言。它源于C語言家族,其當(dāng)前版本是8.0,能夠支持.NET Core 3.x和.NET Standard 2.1。更多有關(guān)C#的信息,請參見--https://docs.microsoft.com/dotnet/csharp。
  • F#是針對.NET的跨平臺、開源且功能性的編程語言。更多有關(guān)F#的信息,請參見--https://dotnet.microsoft.com/languages/fsharp。
  • Visual Basic是Microsoft的傳統(tǒng)編程語言。它具有用于構(gòu)建安全、面向?qū)ο髴?yīng)用的簡單語法。更多有關(guān)Visual Basic的信息,請參見--https://docs.microsoft.com/dotnet/visual-basic。

選擇與使用

我們該如何選擇和使用上述三種運行時呢?下面是我的一些建議:

  • .NET Framework可用于:
  1. 生成Forms(表單)應(yīng)用。
  2. 無法跨平臺運行的Windows環(huán)境中。
  • .NET Core可用于:
  1. 構(gòu)建占用空間較小的高性能應(yīng)用。
  2. 跨平臺運行的場景中。
  • Mono for Xamarin可用于:
  1. 構(gòu)建利用原生功能和跨平臺場景的移動應(yīng)用中。

通過使用.NET Core,您可以構(gòu)建框架依賴型(framework-dependent)或自包含型(self-contained)應(yīng)用。其中,框架依賴型應(yīng)用適合于獨立于操作系統(tǒng),但需要進(jìn)行小型部署的場景。而自包含型應(yīng)用,可以控制版本,并且不需要安裝.NET Core,當(dāng)然要求的部署體量會更大,而且需要指定目標(biāo)操作系統(tǒng)。

就ASP.NET和ASP.NET Core而言,ASP.NET是一種傳統(tǒng)技術(shù),只能運行在Windows上,不過其功能比較豐富。而ASP.NET Core是為高性能的應(yīng)用而設(shè)計的,能夠?qū)崿F(xiàn)跨平臺的獨立運行。不過它的功能和第三方庫(如:表單)遠(yuǎn)不及ASP.NET。

此外,我們還應(yīng)當(dāng)事先判斷是否需要共享代碼。如果是,我們就應(yīng)該使用.NET Standard Library;如果否,則需要在特定運行時中,使用其他的類庫。

展望

Microsoft Build 2019大會曾宣布.NET Core和.NET Framework將在.NET 5中被統(tǒng)一,將只有一個.NET SDK來服務(wù)Windows、Linux、macOS、iOS、Android等平臺。該框架將包含全新的.NET API、運行時功能、以及語言功能。此外,.NET 5還會對RyuJIT的代碼質(zhì)量、垃圾收集、以及JSON序列化等予以改進(jìn)。

此外,Microsoft也宣布(請參見--https://devblogs.microsoft.com/dotnet/introducing-net-multi-platform-app-ui/)將推出一個用于創(chuàng)建跨平臺應(yīng)用的全新UI框架--.NET MAUI。它將是Xamarin.Forms的演化版,旨在簡化開發(fā)人員的工作流程和項目結(jié)構(gòu),將多個平臺封裝到一個項目之中。據(jù)說,.NET MAUI的通用版本將在2021年11月發(fā)布的.NET 6中被提供。

一些實用的資源

原文標(biāo)題:A Brief Walk Through the .NET Ecosystem,作者:Milan Milanovic

【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】

責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2023-09-07 10:26:50

接口測試自動化測試

2023-12-24 12:56:36

協(xié)程

2023-05-05 07:10:42

IPv6互聯(lián)網(wǎng)

2019-05-31 08:33:23

2021-08-16 05:39:33

云計算云計算環(huán)境信創(chuàng)云

2020-03-25 08:47:22

智能邊緣邊緣計算網(wǎng)絡(luò)

2012-12-27 10:58:24

KVMKVM概念

2021-06-06 18:22:04

PprofGopher邏輯

2023-10-25 08:17:06

Lite模式代理類

2023-10-29 08:35:47

AndroidAOP編程

2021-03-29 14:16:20

云計算

2021-09-18 11:36:38

混沌工程云原生故障

2024-05-06 00:30:00

MVCC數(shù)據(jù)庫

2022-06-07 07:37:40

線程進(jìn)程開發(fā)

2019-08-07 17:18:18

云計算云原生函數(shù)

2022-02-08 12:06:12

云計算

2011-08-23 11:03:35

ATM

2025-01-16 10:41:40

2023-08-17 10:12:04

前端整潔架構(gòu)

2021-12-09 07:47:58

Flink 提交模式
點贊
收藏

51CTO技術(shù)棧公眾號