<h3>.NET简介<br/></h3><p>微软于90年代开始研究称为.NET战略的技术。20年代初,.NET框架被称为下一代Windows服务。2000年后期微软发布了.NET框架的第一个beta版本,然后于2002年2月13日发布了第一个正式版本(.NET 1.0),之后又陆续发布了许多具有新功能的版本,关键节点如下图:</p><p><br/></p><p>.NET是微软创建的开源开发平台,使用 MIT and Apache 2 协议,属于.NET基金会。</p><p><br/></p><p>.NET支持多种开发语言,可以使用C#、VB.NET、C++/CLI、F#等语言进行开发,不同语言的开发者可以互相配合。</p><p><br/></p><p>使用.NET可以开发不同类型的应用,如桌面应用、移动应用、游戏、Web应用。</p><p><br/></p><p>使用.NET Core、.NET5及以上版本可以开发跨平台的应用程序。.NET支持不同的操作系统,如Windows、Linux、Android、iOS,支持不同架构的处理器(x86、x64、ARM32、ARM64)。</p><p><br/></p><p>可以使用Visual Studio(Windows)、Visual Studio for Mac(macOS)、Visual Studio Code(Windows/macOS/Linux)进行开发,可以通过NuGet包管理器安装第三方依赖。</p><p><br/></p><p>如果想了解一些基于.NET实现的解决方案,如Roslyn、dnSpy、log4net、Prism、Caliburn Micro等,可以参考此链接。</p><p><br/></p><h3>.NET体系</h3><p>起初,微软创建了.NET Framework,它是基于Windows的。Mono创建于2001年,它提供了.NET的另一种实现,具备跨平台的能力。为了创建跨平台的解决方案,微软推出了.NET Core。2020年末,微软发布了.NET 5,可以看到已经去掉了Framework及Core的后缀,此后的版本也不会再区分Framework及Core。发展到现在,.NET体系包含了上述不同的框架及其运行时。</p><p><br/></p><p>所有运行时使用.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的体系结构如图所示:</p><p><br/></p><h3>VB C# F#</h3><p>可以使用VB、C#或F#等语言编写.NET应用程序。</p><p><br/></p><p>VB是微软开发的传统面向对象编程语言,VB6.0后,引入了.NET Framework。VB深受比尔盖茨的喜爱,它是最接近人类语言的计算机编程语言。</p><p><br/></p><p>主导C#开发的是Pascal之父、Delphi首席架构师Anders Hejlsberg。C#取义C++的++,即(C++)++,合在一起就是个#,所以读作C sharp。C#的设计思想主要借鉴了C++,Java以及Pascal,是一种面向对象的编程语言,也是目前最流行的开发语言之一。</p><p><br/></p><p><br/></p><p>F#是2005年微软研究院发布的一种函数式编程语言,是一种开源、跨平台、可互操作的编程语言,用于编写简洁、可靠且性能高的代码。</p><p><br/></p><h3>.NET Framework .NET Core .NET 5</h3><p>.NET Framework是用来开发运行在Windows系统下的应用的,使用了很多Windows API,目前最新版本为4.8,源码已开源。它由CLR、类库、及应用工作负载(WPF、WinForm、ASP.NET)组成。如果需要运行.NET Framework构建的应用,需要先安装相应版本的框架。同一台机器可以安装不同版本的.NET Framework。</p><p><br/></p><p>.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,但部署会比较大。</p><p><br/></p><p>.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的支持。</p><p><br/></p><p>.NET Standard不是某一个具体的实现,而是一组标准、规范,它定义了一组API。</p><p><br/></p><h3>一些名词</h3><p>首先解释下各个名词的意思:</p><p><br/></p><p>JIT(Just in time):JIT编译器将IL转换为处理器理解的机器代码,JIT边运行边编译,编译发生在应用程序执行期间,因此编译时间是运行时间的一部分。JIT编译在需要运行代码的同一台计算机上按需执行。</p><p><br/></p><p>AOT(Ahead of time):运行前编译。AOT编译在应用程序执行前进行并且通常在不同计算机上执行。AOT 工具不会在运行时进行编译,因此它们不需要最大程度地减少编译所花费的时间,这意味着它们可花更多的时间进行优化。</p><p><br/></p><p>IL(Intermediate language):高级.NET语言(例如C#)编译为与硬件无关的指令集,称为中间语言(IL)。IL 有时也被称为MSIL(Microsoft IL)或CIL(Common IL)。</p><p><br/></p><p>CLR(Common Language Runtime):即公共语言运行时,它负责处理内存分配及管理。CLR也是一个虚拟机,可以使用JIT编译生成代码,执行应用程序。</p><p><br/></p><p>BCL(Base class library):基类库,一组包含 System.*(以及有限范围的 Microsoft.*)命名空间的库。BCL 是一种通用的低级框架,高级应用程序框架(如ASP.NET Core)在其上构建。</p><p><br/></p><p>CTS(Common type system):即通用类型系统。CTS定义了CLR如何声明、使用和管理类型,也是CLR支持跨语言集成的重要组成部分。CTS建立了有助于实现跨语言集成、类型安全和高性能代码执行的框架,提供了面向对象的模型,支持多种编程语言的完整实现,定义了语言必须遵循的规则,提供了包含应用程序开发中使用的基本数据类型(例如Boolean、Byte、Char、Int32和UInt64)的库。</p><p><br/></p><p>CLS(Common Language Specification):即公共语言规范。为了实现完整的互操作性场景,在代码中创建的所有对象都必须依赖于所用语言中的一些共性,.NET在CLS中指定了这些共性。CLS是 CTS的一个子集。如果一个组件仅在其API中公开CLS功能,则称为符合CLS,则可以与.NET上支持的所有语言交互。</p><p><br/></p>