文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

关于.NET生态,你了解多少?

2024-12-03 15:38

关注

.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/monowww.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.NETDotNetAnywhereCosmosOSCrossNet.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应用。其中:

选择与使用

我们该如何选择和使用上述三种运行时呢?下面是我的一些建议:

  1. 生成Forms(表单)应用。
  2. 无法跨平台运行的Windows环境中。
  1. 构建占用空间较小的高性能应用。
  2. 跨平台运行的场景中。
  1. 构建利用原生功能和跨平台场景的移动应用中。

通过使用.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中被提供。

一些实用的资源

原文A Brief Walk Through the .NET Ecosystem,作者:Milan Milanovic

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

来源:51CTO内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯