为了更好地学习.NET框架,本文简略梳理了.NET体系相干内容。文中若有不精确的中央,欢送大家指出交换。
.NET简介
微软于90年代开始钻研称为.NET策略的技术。20年代初,.NET框架被称为下一代Windows服务。2000年前期微软公布了.NET框架的第一个beta版本,而后于2002年2月13日公布了第一个正式版本(.NET 1.0),之后又陆续公布了许多具备新性能的版本,要害节点如下图:
.NET是微软创立的开源开发平台,应用 MIT and Apache 2 协定,属于.NET基金会。
.NET反对多种开发语言,能够应用C#、VB.NET、C++/CLI、F#等语言进行开发,不同语言的开发者能够互相配合。
应用.NET能够开发不同类型的利用,如桌面利用、挪动利用、游戏、Web利用。
应用.NET Core、.NET5及以上版本能够开发跨平台的应用程序。.NET反对不同的操作系统,如Windows、Linux、Android、iOS,反对不同架构的处理器(x86、x64、ARM32、ARM64)。
能够应用Visual Studio(Windows)、Visual Studio for Mac(macOS)、Visual Studio Code(Windows/macOS/Linux)进行开发,能够通过NuGet包管理器装置第三方依赖。
如果想理解一些基于.NET实现的解决方案,如Roslyn、dnSpy、log4net、Prism、Caliburn Micro等,能够参考此链接。
.NET体系
起初,微软创立了.NET Framework,它是基于Windows的。Mono创立于2001年,它提供了.NET的另一种实现,具备跨平台的能力。为了创立跨平台的解决方案,微软推出了.NET Core。2020年末,微软公布了.NET 5,能够看到曾经去掉了Framework及Core的后缀,尔后的版本也不会再辨别Framework及Core。倒退到当初,.NET体系蕴含了上述不同的框架及其运行时。
所有运行时应用.NET提供的根底工具进行编译和运行代码,包含.NET反对的开发语言(C#、VB等)、编译器(Roslyn)、垃圾回收期(GC),以及构建工具(MsBuild)、CLR。比方,开发一款Windows客户端应用程序,能够应用C#或者VB语言编写逻辑代码,应用.NET Framework的WPF框架或WinForm框架进行界面开发。应用Visual Studio进行开发时,会调用MsBuild构建程序,它会调用Roslyn将代码编译为IL保留在程序集中(exe/dll)。在运行时,CLR中的JIT编译器会将IL编译为本机操作系统了解的代码执行,GC则负责垃圾回收。.NET的体系结构如图所示:
VB C# F#
能够应用VB、C#或F#等语言编写.NET应用程序。
VB是微软开发的传统面向对象编程语言,VB6.0后,引入了.NET Framework。VB深受比尔盖茨的青睐,它是最靠近人类语言的计算机编程语言。
主导C#开发的是Pascal之父、Delphi首席架构师Anders Hejlsberg。C#取义C++的++,即(C++)++,合在一起就是个#,所以读作C sharp。C#的设计思维次要借鉴了C++,Java以及Pascal,是一种面向对象的编程语言,也是目前最风行的开发语言之一。
F#是2005年微软研究院公布的一种函数式编程语言,是一种开源、跨平台、可互操作的编程语言,用于编写简洁、牢靠且性能高的代码。
.NET Framework .NET Core .NET 5
.NET Framework是用来开发运行在Windows零碎下的利用的,应用了很多Windows API,目前最新版本为4.8,源码已开源。它由CLR、类库、及利用工作负载(WPF、WinForm、ASP.NET)组成。如果须要运行.NET Framework构建的利用,须要先装置相应版本的框架。同一台机器能够装置不同版本的.NET Framework。
.NET Core是开源的,2016年公布了.Net Core 1.0版本。它是为了提供跨平台的利用开发能力,并非是.NET Framework的替代品。.NET Core退出了UWP(Windows通用利用平台)框架,能够开发运行在PC、Windows Phone、Surface等所有Win 10平台的利用。不同于.NET Framework,.NET Core由CoreCLR、.NET Core类库、ASP.NET Core等组成,后续的版本也退出了WinForm、WPF等框架。.NET Core能够在不同平台上运行,它能够创立独立利用,无需在主机中装置.NET Core,但部署会比拟大。
.NET 5是2020年公布的,打算2021年11月公布.NET 6。.NET 5是.NET Core 3.1的下一个版本,因为最新的.NET Framework版本为4.8,为了防止开发者困惑,跳过了4,这也表明了.NET 5是.NET平台的将来,它将对立.NET。在.NET Core开始时,就曾经向我的项目中增加了大概五万个.NET Framework API,.NET Core 3.0进一步缩小差距,增加了WinForm、WPF、EF,.NET 5在此基础上,又集成了Mono的长处。.NET 6中将正式集成MAUI,MAUI是Xamarin.Forms的进化,应用MAUI进行开发,将能够公布到Android、iOS、Windows、macOS平台。另外,.NET 5也提供了对ARM64的反对。
.NET Standard不是某一个具体的实现,而是一组规范、标准,它定义了一组API。
一些名词
首先解释下各个名词的意思:
JIT(Just in time):JIT编译器将IL转换为处理器了解的机器代码,JIT边运行边编译,编译产生在应用程序执行期间,因而编译工夫是运行工夫的一部分。JIT编译在须要运行代码的同一台计算机上按需执行。
AOT(Ahead of time):运行前编译。AOT编译在应用程序执行前进行并且通常在不同计算机上执行。AOT 工具不会在运行时进行编译,因而它们不须要最大水平地缩小编译所破费的工夫,这意味着它们可花更多的工夫进行优化。
IL(Intermediate language):高级.NET语言(例如C#)编译为与硬件无关的指令集,称为两头语言(IL)。IL 有时也被称为MSIL(Microsoft IL)或CIL(Common IL)。
CLR(Common Language Runtime):即公共语言运行时,它负责解决内存调配及治理。CLR也是一个虚拟机,能够应用JIT编译生成代码,执行应用程序。
BCL(Base class library):基类库,一组蕴含 System.*
(以及无限范畴的 Microsoft.*
)命名空间的库。BCL 是一种通用的低级框架,高级应用程序框架(如ASP.NET Core)在其上构建。
CTS(Common type system):即通用类型零碎。CTS定义了CLR如何申明、应用和治理类型,也是CLR反对跨语言集成的重要组成部分。CTS建设了有助于实现跨语言集成、类型平安和高性能代码执行的框架,提供了面向对象的模型,反对多种编程语言的残缺实现,定义了语言必须遵循的规定,提供了蕴含利用程序开发中应用的根本数据类型(例如Boolean、Byte、Char、Int32和UInt64)的库。
CLS(Common Language Specification):即公共语言标准。为了实现残缺的互操作性场景,在代码中创立的所有对象都必须依赖于所用语言中的一些共性,.NET在CLS中指定了这些共性。CLS是 CTS的一个子集。如果一个组件仅在其API中公开CLS性能,则称为合乎CLS,则能够与.NET上反对的所有语言交互。
.NET公布打算
下个月(2021.11),微软将公布正式版的.NET 6、C# 10及VS2022。.NET 6将进一步实现微软.NET平台的对立愿景,为.NET开发者提供了更好的平台。.NET公布打算如下图:
参考文章
- .NET的前世今生与未来
- .Net技术栈
- 微软官网文档
- DZone
- Dr.Milan
- Stackify
- devblogs