在我的博客《.NET平台系列2 .NET Framework 框架详解》与 《.NET平台系列7 .NET Core 体系结构详解》 两篇文章中分别详细介绍了.NET Framewrok与.NET Core 的核心构成以及各部件的组成与原理。本文通过其他维度更加直接的对比说明两者的差异。
.NET平台自诞生之日起就具备跨平台的能力。.NET Framework本身是一个跨平台的解决方案,在这一基础上它还支持C#和VB等编程语言,且这些语言共同遵守公共语言规范( Common Language Specification 简称CLS),最终生成的应用程序都会被编译成公共中间语言(Common Intermediate Language 简称CIL)或者MSIL(微软中间语言)执行。从多层架构设计的角度来看,如果想让它不仅可以在多种 Windows操作系统中运行,也可以在macOS、 Linux操作系统中运行,则主要需要修改架构底层关于操作系统的部分,而原有的多种编程语言实际上与所运行的操作系统关系很小。
对比 .NET Framework 的公共语言运行时(Common Language Runtime 简称CLR),.NETCore 重新设计了 CoreCLR,以及一个被称为 CoreFX 的基础类库( Base Class Library 简称BCL)。
.NET Framework在不断升级过程中使自己变得更加强大和完备,但是在另一方面也使得自己变得越来越臃肿。随着版本的不断升级,构成.NET Framework的应用模型、BCL和运行时(CLR)都在不断地膨胀(.NET Framework 2.0/3.x和.NET Framework 4.x分别采用CLR 2.0和CLR 4.0)
.NET Core 是借鉴 .NET Frmawork 的优秀思想与强大功能重新构建的新框架,体积自然要比.NET Framework小的多。如Windows Forms 和 Windows Presentation Foundation(WPF)可用于构建图形用户界面(GUI应用程序与Windows生态系统紧密相连,无法跨平台,因此将他们从 macOS 和 Linux 的 .NET Core 中移除了。
下图引用微软官方帮助文档中的一幅图,图中通过饼图和柱状图两种形式展示了 CoreFX 中专门针对各个操作系统(Windows、Unix、 Linux和OX)的C#代码比例和代码行数,可以看到90%的 CoreFX 代码是与操作系统无关的,所以我们在使用 ASP.NET Core时受不同操作系统的影响也同样会非常小。
在.NET Framework 时代,每发布一个重大版本,需要经历1年,2年,甚至3年。发版周期相对较长。
从《.NET Core发展历程》图中可以了解到自.NET Core 1.0于2016年6月26日正式发布,至2019年12发布.NET Core 3.1版本,基本上是每年发布一个大的版本。.NET5已经于20201年11月正式发布。微软.NET团队规划未来每年第四季度发布一个重大版本,其中奇数标记的为GA版本,偶数标记的为LTS版本。
参考文献:
- https://devblogs.microsoft.com/dotnet/introducing-net-5/