乐趣区

关于.net:NET简介

为了更好地学习.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
退出移动版