如果您是一名开发人员,那么一定听说过.NET技术吧。它是由Microsoft创建的开源式开发人员平台,可用于构建诸如:Web、移动、桌面、游戏等许多不同类型的应用。通常,它由不同的工具、编程语言和库所组成。其中,.NET Framework是.NET生态系统中最受欢迎的技术之一。近年来,.NET Core和.NET Standard Library(标准库)也在该生态系统中相继出现。面对这么多的技术栈,我们该如何选择呢?下面,我们将深入探讨它们的各种特点、用途与对应工具。首先,我们从.NET的简史开始。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、网络空间、营销软件、网站建设、道外网站维护、网站推广。
.NET的发展历史
在九十年代,Microsoft开始致力于开发名为.NET Strategy的产品。该策略涵盖了所有的Microsoft产品线。在2000年,.NET框架被命名为下一代Windows服务(NGWS)。.NET框架的第一个beta版发布于2000年末,而.NET 1.0的第一版是在2002年2月13日发布的。下面是其后续版本及其特点:
.NET生态系统概述
目前,包含不同运行时(runtime)的.NET生态系统,由Microsoft开发平台中的如下组件构成:
上述三大运行时都实现了.NET Standard Library,同时它们也是.NET API的规范。因此,为某个运行时创建的代码,同样可以被其他运行时所执行。而且所有运行时都使用工具和基础架构来编译和运行代码。其中涉及到的语言有C#和Visual Basic,编译器有Roslyn,还有垃圾回收,以及诸如MS Build或(Core)CLR之类的构建工具。
下面,我们将重点讨论.NET的三大主要运行时:
.NET Framework
.NET Framework是用于在Windows上构建和运行应用程序的软件开发框架。目前,它部分开源(请参见--https://github.com/microsoft/referencesource)。.NET Framework是由公共语言运行库(Common Language Runtime,CLR)、. NET Framework类库和应用负载(WPF、Windows Forms和ASP.NET)所组成。其中,CLR是通用基础架构的一部分,既可以运行代码,又可以执行JIT(just-in-time)、以及垃圾回收(C#、VB.NET、F#)等。
由CLR管理的代码被称为托管代码。这些代码被编译为通用中间语言(Common Intermediate Language,CIL),并存储在扩展名为.exe或.dll的程序集中。当应用程序运行时,CLR会执行汇编,并使用JIT编译器将机器代码转换为可以在特定计算架构上运行的代码。
.NET Framework库包含各种功能的类、接口和数据类型(如:字符串、文件系统支持等)。它允许用户创建不同类型的应用程序,例如:控制台应用、Windows Form、Windows Communication Foundation(WCF)、Windows Workflow Foundation(WF)、Windows Presentation Foundation(WPF)、ASP.NET应用(如:各种表单、Web API)、以及Azure应用(如:WebJobs、Cloud Services)。不过其中大多数都仅限于Windows平台,并使用Windows API。
虽然Windows已经预安装了其中的某些版本,但是如果您要运行并使用由.NET Framework生成的应用的话,仍需要事先完成相应的安装。.NET Framework通常被安装在C:\Windows\Microsoft.NET\Framework(或Framework64)上。该文件夹内包含了所有已安装的主要版本。
.NET Core
作为.NET生态系统中的一种运行时,.NET Core于2016年被发布并开源(请参见--https://github.com/dotnet/core)。它并非.NET Framework的新版本,也不会替代.NET Framework,而是被独立地构建出来,旨在跨平台进行应用程序的开发。.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包括并提供不同的功能类。它支持不同类型的应用负载,包括:ASP.NET Core(如:MVC和API)、各种控制台应用,以及UWP。其中,UWP为所有在Windows 10上运行的设备,提供了通用类型的系统、API和应用模型。从.NET Core 3.0 SDK开始,它能够支持包括Windows Forms Designer在内的各种Windows Forms应用。
.NET Core可以运行在不同的平台上,其中包括:Windows客户端、服务器端、物联网、Linux、Ubnutu、FreeBSD、Tizen、Mac OSX等。.NET Core通常被安装在C:\Program Files\dotnet\shared\Microsoft.NETCore.App[versions]中。并且,它可以根据机器或用户的不同,实现多版本的并行安装。
此外,由于.NET Core能够将应用打包到.exe文件中,因此它可以创建一个自包含的版本,而无需在主机上安装.NET Core。例如,您可以运行shell命令“dotnet publish -r linux-x64 --self-contained true”。当然,其缺点是会导致部署的体量变大。
Mono For Xamarin
Mono是.NET Framework运行时的一个克隆。您可以在https://github.com/mono/mono和www.mono-project.com处查看到它的源代码。微软于2016年收购了Xamarin,并使其成为.NET平台的完全开源分支。目前,它是由Mono运行时和Xamarin Class Library所组成,可以运行IOS、OS X和Android等应用负载。
与.NET Core相似,Mono包含垃圾回收、JIT、AOT、以及对C#(并非VB.NET和F#)的完全支持。与C++代码相似,Mono AOT编译器能够将.NET代码内置到可以在单机上运行的可执行文件中。同时,Mono For Xamarin具有一个支持创建应用程序(可用于I/O、集合等)的类库。
Mono For Xamarin可以被用来运行Apple IOS、MAC OS X、Android等应用负载,而且可以在这些平台之间共享代码,以作为原生应用。每个应用程序都可以与Mono运行时、以及一个类库捆绑在一起,而无需在设备上额外安装Mono。
其他框架
.NET Compact Framework和.NET Micro Framework
.NET Compact Framework和.NET Micro Framework两种框架都是通过精简运行时,运行在受限制的设备(如:PDA、移动电话控制器等)上。其中,.NET Micro Framework针对的是256KB闪存和64KB内存。
Silverlight
于2007年发布的Silverlight是一种流行的跨平台.NET技术。它能够为浏览器构建诸如:播放与下载视频,创建丰富的UI和动画等富媒体体验。不过,Microsoft已决定于2021年10月停止支持Silverlight。
社区项目
除了Microsoft官方提供的运行时,开发者社区也提供了诸如:DotGNU Portable.NET、DotNetAnywhere、CosmosOS和CrossNet.NET等运行时。它们的构建方式略有不同。
.NET Standard
无论是.NET Framework、.NET Core还是Xamarin,不同的运行时会使用各自不同的类库。而由于它们使用的是不同API,因此不同的运行时无法彼此共享代码。为此,Microsoft于2016年发布了.NET Standard Library。它通过一组正式的规范,说明了各个运行时都能够使用和实现的API。而特定的运行时也能够实现特定版本的.NET Standard。例如:.NET Framework 4.6.1就能够实现.NET Standard 2.0。同时,它也是Portable Class Libraries(PCL)的一种发展方向。
.NET Standard和Portable Class Libraries (即,可在不同平台上使用的库)之间的区别是:
.NET Standard的每个版本都有一组API(如:System.Drawing),由于它们都带有以前版本的所有API,因此能够向后兼容。同时,那些特定的.NET运行时版本实现的是特定的.NET Standard版本。也就是说,较低版本的.NET Standard能够覆盖更多平台。
工具类
.NET Framework工具
对于.NET Framework,您可以请使用MSBuild。它既可以在Visual Studio构建代码时被调用,也可以从命令行中被调用。MSBuild能够判断如何构建、以及由谁负责编译。例如:如果代码是由C#或VB.NET编写的,那么它将调用.NET编译器平台--Roslyn。而由于编译的结果是带有中间语言(intermediate language,IL)的二进制文件(如:.EXE或.DLL),因此它们可以被CLR所解释。如前所述,CLR包含了一个JIT编译器,可以编译出能够被操作系统理解的原生代码。而且CLR带有垃圾收集器(Garbage Collector )之类的工具,可以按需清理内存。
.NET Core工具
MSBuild也可以被用于.NET Core工具以及.NET Compiler Platform(Roslyn)。在使用IL生成二进制文件时,我们可以使用Core Common Language Runtime (CoreCLR)。与.NET Framwork CLR不同的是,CoreCLR可以在多个框架上运行,并通过JIT编译器,将IL编译为Windows、MacOS和Linux的原生代码。当然,CoreCLR和原生代码都是由应用主机进程--dotnet.exe进行加载的。
而在编译UWP时,我们可以使用AOT-Compiled(.NET Native)来进行编译,该编译器从IL生成原生代码,并将代码作为可部署的程序包来生成,而不是在运行时进行编译。此法提高了整体性能。
.NET Core带有一个被称为dotnet cli的全新命令行界面。您可以用dotnet new来创建新的项目;用dotnet build来构建应用;用dotnet run来运行;用dotnet publish来部署。当然,您也可以用dotnet –info来检查SDK与运行时被安装的位置。
Mono For Xamarin工具
在此,MSBuild再次被用于仅针对C#文件的构建过程。例如,我们可以通过Xamarin Compiler来编译Android设备上的C#代码。而作为JIT-Compiler的Mono运行时,会按需生成特定于目标Android设备的原生代码。当然,它也带有垃圾收集器(Garbage Collector )之类的工具。
而对于iOS上的C#代码,我们则可以通过Xamarin Compiler对其进行预编译,并使用ARM汇编语言,来生成IOS原生的软件包。
Visual Studio IDE
Visual Studio是由Microsoft提供的IDE,可用于横跨各种平台(包括Android和iOS),构建、调试和发布应用程序。通过与.NET的集成,Visual Studio可以提供特定于语言环境的各项功能。
Windows版的Visual Studio提供一个免费的社区版。而Visual Studio for Mac则是基于Xamarin公司(前身为Xamarin Studio)的MonoDevelop来构建的IDE。
类库
.NET生态系统涉及到许多类库,其中大多数可以在NuGet包中找到。此处的NuGet是.NET的软件包管理器,它包含了90,000多个软件包。
语言
我们可以用C#、F#或Visual Basic来编写各种.NET应用。其中:
选择与使用
我们该如何选择和使用上述三种运行时呢?下面是我的一些建议:
通过使用.NET Core,您可以构建框架依赖型(framework-dependent)或自包含型(self-contained)应用。其中,框架依赖型应用适合于独立于操作系统,但需要进行小型部署的场景。而自包含型应用,可以控制版本,并且不需要安装.NET Core,当然要求的部署体量会更大,而且需要指定目标操作系统。
就ASP.NET和ASP.NET Core而言,ASP.NET是一种传统技术,只能运行在Windows上,不过其功能比较丰富。而ASP.NET Core是为高性能的应用而设计的,能够实现跨平台的独立运行。不过它的功能和第三方库(如:表单)远不及ASP.NET。
此外,我们还应当事先判断是否需要共享代码。如果是,我们就应该使用.NET Standard Library;如果否,则需要在特定运行时中,使用其他的类库。
展望
Microsoft Build 2019大会曾宣布.NET Core和.NET Framework将在.NET 5中被统一,将只有一个.NET SDK来服务Windows、Linux、macOS、iOS、Android等平台。该框架将包含全新的.NET API、运行时功能、以及语言功能。此外,.NET 5还会对RyuJIT的代码质量、垃圾收集、以及JSON序列化等予以改进。
此外,Microsoft也宣布(请参见--https://devblogs.microsoft.com/dotnet/introducing-net-multi-platform-app-ui/)将推出一个用于创建跨平台应用的全新UI框架--.NET MAUI。它将是Xamarin.Forms的演化版,旨在简化开发人员的工作流程和项目结构,将多个平台封装到一个项目之中。据说,.NET MAUI的通用版本将在2021年11月发布的.NET 6中被提供。
一些实用的资源
分享题目:关于.NET生态,你了解多少?
网站地址:http://www.shufengxianlan.com/qtweb/news1/46501.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联