当前位置: 首页 > 科技观察

您对.NET生态系统了解多少?

时间:2023-03-19 19:16:12 科技观察

【.com速译】如果你是开发者,你一定听说过.NET技术。它是微软创建的一个开源开发者平台,可用于构建许多不同类型的应用程序,例如:网络、移动、桌面、游戏等等。通常,它由不同的工具、编程语言和库组成。其中,.NETFramework是.NET生态系统中最受欢迎的技术之一。近年来,.NETCore和.NETStandardLibrary(标准库)也出现在这个生态系统中。面对如此多的技术栈,我们应该如何选择?下面,我们将深入探讨它们的各种特性、用途和对应的工具。首先,我们从.NET的简要历史开始。.NET的发展历史1990年代,微软开始着手开发一款名为.NETStrategy的产品。该策略涵盖所有Microsoft产品线。2000年,.NETFramework被命名为下一代Windows服务(NGWS)。.NETFramework的第一个测试版于2000年底发布,而.NET1.0的第一个版本于2002年2月13日发布。以下是其后续版本及其功能:.NETFramework2.0(2005年11月):包含泛型集合、迭代器和可为null的类型。.NETFramework3.0(2006年11月):包含WPF、WCF和WWF。.NETFramework3.5(2007年11月):包括AJAX、LINQ、ASP.NETMVC。.NETFramework4.0(2010年4月):包含MEF、DLR、任务并行库、Razor视图引擎、新的C#/VB语言功能。.NETFramework4.5(2012年8月):支持异步和zip压缩。.NETCore1.0(2014年11月):包括对跨平台、ASP.NET5和.NETNative的支持。.NETCore2.0(2017年8月):具有显着的性能改进并实现了.NETStandard2.0。.NETFramework4.8(2019年4月):包括JIT增强、WPF应用程序的高DPI增强、辅助功能改进、性能更新和安全增强。.NETCore3.0(2019年9月):提供C#8.0的新特性并实现.NETStandard2.1。让Windows桌面支持Windows窗体和WPF。.NET生态系统概述目前,包括不同运行时的.NET生态系统在微软开发平台中由以下组件组成:.NETFramework(WPF、WindowsForms、ASP.NET)以Windows为中心。.NETCore(ASP.NETCore,通用Windows平台)是一个跨平台的工具,可以与其他版本并排使用。MonoForXamarin(IOS、OSX、Android)也是跨平台的。以上三大运行时都实现了.NETStandardLibrary,同时也是.NETAPI的规范。因此,为一个运行时创建的代码也可以由其他运行时执行。所有运行时都使用工具和基础设施来编译和运行代码。其中包括C#和VisualBasic等语言、Roslyn等编译器、垃圾收集以及MSBuild或(Core)CLR等构建工具。下面,我们将重点介绍.NET的三个主要运行时:.NETFramework.NETFramework是一种用于在Windows上构建和运行应用程序的软件开发框架。目前,它是部分开源的(参见--https://github.com/microsoft/referencesource)。.NETFramework由公共语言运行库(CommonLanguageRuntime,CLR)、.NETFramework类库和应用程序加载(WPF、WindowsForms和ASP.NET)组成。其中,CLR是公共基础设施的一部分,它不仅可以运行代码,还可以执行JIT(即时)、垃圾回收(C#、VB.NET、F#)等。由CLR管理的代码称为托管代码。这些代码被编译成通用中间语言(CIL)并存储在扩展名为.exe或.dll的程序集中。当应用程序运行时,CLR执行汇编并使用JIT编译器将机器代码转换为可以在特定计算体系结构上运行的代码。.NETFramework库包含各种功能的类、接口和数据类型(例如字符串、文件系统支持等)。它允许用户创建不同类型的应用程序,例如:控制台应用程序、Windows窗体、WindowsCommunicationFoundation(WCF)、WindowsWorkflowFoundation(WF)、WindowsPresentationFoundation(WPF)、ASP.NET应用程序(例如:各种窗体、WebAPI)和Azure应用程序(例如:WebJobs、云服务)。但是,它们中的大多数仅限于Windows平台并使用WindowsAPI。虽然Windows已经预装了其中的一些版本,但是如果你想运行和使用由它生成的应用程序。NETFramework,还是需要提前完成相应的安装。.NETFramework通常安装在C:\Windows\Microsoft.NET\Framework(或Framework64)。此文件夹包含所有已安装的主要版本。作为.NET生态系统中的运行时,.NETCore于2016年发布并开源(参见--https://github.com/dotnet/core)。它不是.NETFramework的新版本,也不会取代.NETFramework,而是为跨平台应用程序开发而独立构建的。.NETCore由可以运行CLR和库的AppHost(dotnet.exe)组成。它具有公共语言运行时(CoreCLR)和.NETCore类库。CoreCLR使用JIT编译和垃圾收集来运行代码。它支持C#、VB.NET和F#。作为.NETFramework库的一个子集,.NETCore类库包含并提供了不同的功能类。它支持不同类型的应用程序加载,包括:ASP.NETCore(例如:MVC和API)、各种控制台应用程序和UWP。其中,UWP为运行在Windows10上的所有设备提供了通用类型的系统、API和应用程序模型。从.NETCore3.0SDK开始,它可以支持包括WindowsFormsDesigner在内的各种WindowsForms应用程序。.NETCore可以运行在不同的平台上,包括:Windows客户端、服务器、物联网、Linux、Ubnutu、FreeBSD、Tizen、MacOSX等。.NETCore通常安装在C:\ProgramFiles\dotnet\shared\Microsoft.NETCore.App[版本]。并且可以根据不同的机器或用户,实现多个版本的并行安装。此外,由于.NETCore能够将应用程序打包到.exe文件中,它可以创建一个独立的构建,而无需在主机上安装.NETCore。例如,您可以运行shell命令“dotnetpublish-rlinux-x64--self-containedtrue”。当然,它的缺点是会导致部署量较大。MonoForXamarinMono是.NETFramework运行时的克隆。您可以在https://github.com/mono/mono和www.mono-project.com查看其源代码。微软于2016年收购了Xamarin,并使其成为.NET平台的完全开源分支。目前由Mono运行时和Xamarin类库组成,可以运行IOS、OSX、Android等应用程序负载。与.NETCore类似,Mono包括垃圾回收、JIT、AOT和对C#(但不包括VB.NET和F#)的全面支持。与C++代码类似,MonoAOT编译器可以将.NET代码嵌入到可在单机上运行的可执行文件中。同时,MonoForXamarin有一个支持创建应用程序的类库(可用于I/O、集合等)。MonoForXamarin可用于运行AppleIOS、MACOSX、Android等应用程序负载,并可作为原生应用程序在这些平台之间共享代码。每个应用程序都可以与Mono运行时和类库捆绑在一起,而无需在设备上额外安装Mono。其他框架.NETCompactFramework和.NETMicroFramework.NETCompactFramework和.NETMicroFramework这两个框架都运行在受限设备上(例如PDA、手机控制器等)。其中.NETMicroFramework针对256KB闪存和64KB内存。Silverlight于2007年发布,是一种流行的跨平台.NET技术。它可以为浏览器构建丰富的媒体体验,例如播放和下载视频、创建丰富的UI和动画。不过,微软已经决定在2021年10月停止支持Silverlight。社区项目除了微软官方提供的运行时,开发者社区还提供了DotGNUPortable.NET、DotNetAnywhere、CosmosOS和CrossNet.NET等运行时。它们的构造略有不同。.NETStandard无论是.NETFramework、.NETCore还是Xamarin,不同的运行时使用不同的类库。而且由于它们使用不同的API,不同的运行时无法相互共享代码。为此,微软在2016年发布了.NET标准库,它通过一套正式的规范描述了每个运行时可以使用和实现的API。特定的运行时也可以实现特定版本的.NETStandard。例如:.NETFramework4.6.1可以实现.NETStandard2.0。同时也是可移植类库(PCL)的一个发展方向。.NETStandard和可移植类库(即在不同平台上工作的库)之间的区别是:.NETStandard代表Microsoft定义的一组API,而PCL使用的API取决于所选平台。.NETStandard独立于平台,而PCL则针对一组有限的平台。每个版本的.NETStandard都有一组API(例如:System.Drawing),它们是向后兼容的,因为它们承载了以前版本的所有API。此外,那些特定的.NET运行时版本实现了特定的.NETStandard版本。也就是说,.NETStandard的低版本可以覆盖更多的平台。工具.NETFramework工具对于.NETFramework,您可以使用MSBuild。它可以在VisualStudio生成代码时调用,也可以从命令行调用。MSBuild可以确定如何构建以及谁负责编译。例如:如果代码是用C#或者VB.NET写的,那么就会调用.NET编译平台——Roslyn。又因为编译的结果是一个二进制文件(如:.EXE或.DLL),带有中间语言(intermediatelanguage,IL),它们可以被CLR解释。如前所述,CLR包括一个JIT编译器,它编译操作系统可以理解的本机代码。CLR带有垃圾收集器等工具,可以按需清理内存。.NETCore工具MSBuild也可以与.NETCore工具和.NET编译器平台(Roslyn)一起使用。当使用IL生成二进制文件时,我们可以使用核心公共语言运行时(CoreCLR)。与.NETFramworkCLR不同,CoreCLR可以运行在多个框架上,并通过JIT编译器将IL编译成适用于Windows、MacOS和Linux的本机代码。当然,CoreCLR和本机代码都由应用程序宿主进程--dotnet.exe加载。在编译UWP时,我们可以使用AOT-Compiled(.NETNative)来编译,它从IL生成原生代码并将代码生成为可部署的包,而不是在运行时编译。这种方法提高了整体性能。.NETCore带有一个全新的命令行界面,称为dotnetcli。您可以使用dotnetnew创建新项目;使用dotnetbuild构建应用程序;使用dotnetrun运行;使用dotnetpublish进行部署。当然你也可以通过dotnet–info查看SDK和runtime的安装位置。MonoForXamarinTools此处,MSBuild再次用于仅针对C#文件的构建过程。例如,我们可以通过XamarinCompiler在Android设备上编译C#代码。作为JIT编译器的Mono运行时根据需要生成特定于目标Android设备的本机代码。当然,它还附带了垃圾收集器等工具。对于iOS上的C#代码,我们可以通过XamarinCompiler进行预编译,使用ARM汇编语言生成IOS原生软件包。VisualStudioIDEVisualStudio是Microsoft提供的IDE,可用于跨各种平台(包括Android和iOS)构建、调试和发布应用程序。通过与.NET集成,VisualStudio可以提供特定于语言的功能。VisualStudioforWindows提供免费的社区版。VisualStudioforMac是基于XamarinCorporation(原XamarinStudio)的MonoDevelop构建的IDE。类库.NET生态系统涉及许多类库,其中大部分都可以在NuGet包中找到。这里的NuGet是.NET的包管理器,它包含超过90,000个包。语言我们可以使用C#、F#或VisualBasic来编写各种.NET应用程序。其中:C#是一种简单、时尚、面向对象的编程语言。它源自C语言家族,当前版本为8.0,可支持.NETCore3.x和.NETStandard2.1。有关C#的更多信息,请参阅--https://docs.microsoft.com/dotnet/csharp。F#是适用于.NET的跨平台、开源和函数式编程语言。有关F#的更多信息,请参阅--https://dotnet.microsoft.com/languages/fsharp。VisualBasic是Microsoft的传统编程语言。它具有用于构建安全的、面向对象的应用程序的简单语法。有关VisualBasic的更多信息,请参阅--https://docs.microsoft.com/dotnet/visual-basic。选择和使用我们如何选择和使用以上三种运行时?以下是我的一些建议:.NETFramework可用于:生成Forms(表单)应用程序。在无法跨平台运行的Windows环境中。.NETCore可用于:构建占用空间小的高性能应用程序。在跨平台运行的场景下。MonoforXamarin可用于:构建利用本机功能和跨平台方案的移动应用程序。通过使用.NETCore,您可以构建依赖于框架或自包含的应用程序。其中,依赖框架的应用适用于独立于操作系统但需要小型部署的场景。但是自包含应用可以控制版本,不需要安装.NETCore。当然需要的部署量会更大,需要指定目标操作系统。就ASP.NET和ASP.NETCore而言,ASP.NET是一种只能在Windows上运行的传统技术,但功能却很丰富。ASP.NETCore专为高性能应用程序而设计,可以跨平台独立运行。但其功能和第三方库(如:窗体)远不如ASP.NET。另外,我们应该提前判断是否需要共享代码。如果是,我们应该使用.NETStandardLibrary;如果没有,我们需要在特定的运行时使用其他类库。展望MicrosoftBuild2019大会宣布.NETCore和.NETFramework将在.NET5中统一,只有一个.NETSDK服务于Windows、Linux、macOS、iOS、Android等平台。该框架将包括新的.NETAPI、运行时功能和语言功能。此外,.NET5还将改进RyuJIT的代码质量、垃圾回收和JSON序列化。此外,微软还宣布(参见--https://devblogs.microsoft.com/dotnet/introducing-net-multi-platform-app-ui/)它将推出一个用于创建跨平台应用程序的新UI框架——-.NET毛伊岛。它将是Xamarin.Forms的一次进化,旨在简化开发人员的工作流程和项目结构,并将多个平台封装到一个项目中。据说.NETMAUI的通用版本将在.NET6中提供,该版本将于2021年11月发布。一些有用的资源。.NET指南——微软为新手提供的通用文档;.NETCore指南——针对那些正在考虑过渡到Core版本的人;.NETFramework–.NET的原始文档;Xamarin——移动开发文档;.NETFoundation–.NET的开源社区;NuGet——查看所有.NET包;.NETCore和Framework–提供下载链接。.NET开发人员社区–开发人员社区和支持,包括:指向社交媒体、论坛、博客、现场研讨会和.NET基金会等组织的链接。原标题:ABriefWalkThroughthe.NETEcosystem,作者:MilanMilanovic