![a8e98d9825abc4489ca9497080d16da7.png](https://i-blog.csdnimg.cn/blog_migrate/f86eb2de493f32a95b3fd9bd891e3de4.jpeg)
.NET曾是在Windows平台上创建应用程序的杰出技术,但是在移动互联网时代营养不良,变得消瘦。但现在,.NET不仅仅是在Windows平台、也是在Linux和Mac平台上创建应用程序的杰出技术;.NET的大腿又逐渐变粗,壮汉慢慢归来。
.NET技术体系
.NET技术栈主要包含哪些内容?下图给出了.NET体系的一个整体结构。
使用.NET Framework,可以创建Windows Form、WPF和在Windows上运行的旧http://ASP.NET应用程序;
使用.NET Core,可以创建运行在不同平台上运行的http://ASP.NET Core和控制台应用程序。.NET Core也可以创建通用Windows应用(UWP)程序,但UWP只能在Windows平台上运行;因为UWP仍使用了Windows运行库,因此它只能在Windows上使用。
Xamarin平台,基于Mono框架,可以使用C#为iPhone和Android开发应用程序。Xamarin提供了Xamarion.IoS和Xamarin.Android库,使用Xamrian.Forms就可以在两个移动平台之间共享用户界面。
![aa5b43233d82f39a35288d4be8a86c3c.png](https://i-blog.csdnimg.cn/blog_migrate/8dc38fb2c61f3e591864c5e6b9fb6ddb.jpeg)
如上图,.NET Framework,.NET Core和Mono基于.NET Standard(一个标准)构建,他们可以使用相同的库,共享相同的编译器平台、编程语言和运行库组件。
.NET Framework
.NET Framework目前的最新版本是4.8,是在过去十几年(快20年了)不断增强的结果。过去很长一段时间使用它来构建基于Windows的Window Form、WPF和http://ASP.NET应用程序,而且将来也会继续持续一段时间;但它是封闭的。
.NET Core
.NET Core是全新的.NET,是用现代技术和目标对.NET Framework的重写和加强扩展,它的设计起点就很高,很多.NET开发者也是看到这个MS重大更新才继续留在.NET阵营的。
官方的简介:”.NET Core 是一个通用的开放源代码开发平台。 可以使用多种编程语言针对 x64、x86、ARM32 和 ARM64 处理器创建适用于 Windows、macOS 和 Linux 的 .NET Core 应用。 为云、IoT、客户端 UI 和机器学习提供了框架和 API。“;是不是看起来就很高大尚,而且激动人心。
.NET Core 具有以下特性:
- 跨平台 :可在 Windows、macOS 和 Linux 操作系统上运行。
- 开放源代码: .NET Core 框架是开放源代码,使用 MIT 和 Apache 2 许可证。 .NET Core 是一个 .NET Foundation 项目。
- 现代: 它实现了异步编程、使用结构的无复制模式和容器的资源调控等现代范例。
- 性能: 通过各种功能(如硬件内部函数、分层编译和跨度<T>)来提供高性能。
- 跨环境一致: 在多个操作系统和体系结构(包括 x64、x86 和 ARM)上以相同的行为运行代码。
- 命令行工具: 包括可用于本地开发和持续集成的易于使用的命令行工具。
- 部署灵活: 可以在应用中包含 .NET Core 或并行安装它(用户或系统范围安装)。 可搭配 Docker 容器使用。
.NET Standard
.NET Standard不是某一个具体的实现,而是一个协议/标准,这个标准定义了需要实现哪些API。.NET Framework、.NET Core和Xamarin都实现了这个标准,这也是为什么他们可以共用一些库。
公共语言运行库(CLR - Common Language Runtime)
使用.NET Framework的应用程序,和使用.NET Core的应用程序都需要CLR,分别是CLR和CoreCLR。CLR作用是什么呢?在.NET中,编译分为两个阶段:
1. 将源代码编译为中间语言MSIL (Microsoft Intemediate Lanuage);
2. CLR把MSIL编译为平台专用的本地代码。IL代码在.NET程序集中可用。在运行时,JIT编译器(新的JIT编译器是RyuJIT)编译IL代码,创建特定平台的本地代码。
CLR除了JIT功能外,还包含:
- CLR包含一个带有类型加载器的类型系统,负责从程序集中加载类型;
- CLR包含垃圾回收器,从托管堆中清楚不再引用的内存;
- CLR还负责线程的管理,基于.NET开发语言创建的线程不一定来自底层操作系统;线程的虚拟化和管理是又CLR负责。
Windows运行库 - Windows Runtime
从windows 8 开始,Windows操作系统提供了另一种框架:Windows运行库(Windows Runtime),这个运行库由WUP (Windows Uniersal Platform,Windows通用平台)使用。
C#语言
.NET平台上的开发语言有很多(如:C#、Visual Basic 和 F# ),但使用最多的还是C#。
很久很久之前,因为版权的原因,微软并不能随意修改Java源代码,于是他们找来了Anders Hejlsberg,负责设计C#。在去微软工作前,Hejlsberg在Borland公司负责设计Delphi,一种基于Pascal的程序语言。起初他在微软负责J++(微软版Java)。由于Hejlsberg的个人经历,C#的设计思想主要借鉴了C++,Java以及Pascal。
因为C#是在Java和C++之后设计的,微软分析了它们一些典型的编程bug,并试图通过语法规范使得使用C#的程序员避免同样的错误。
NuGet
和其他技术栈一样,.NET技术栈也有自己的包管理工具;NuGet是.NET平台的包管理器工具,NuGet包本质是一个zip文件,里面包含了一个或多个程序集、配置信息和PowerShell脚本。
开发工具IDE
- Visual Studio:不要争,这是宇宙第一IDE!
- Visual Studio Code:短短几年就后来者居上,值得使用。
.NET技术选择
推荐的主流选择:
- FrameWork: .NET Core > .NET Framework
- Windows桌面应用:UWP > WPF > Windows Forms
- Web应用:http://ASP.NET Core > http://ASP.NET > http://ASP.NET Web Forms / WCF
天下合久必分,分久必合,.NET在今年年底将会统一各平台,统一命名为.NET 5。
现在的.NET Core和未来的.NET技术栈的设计目标:
![3f13fb3eb47197deaa05fec6cea03f05.png](https://i-blog.csdnimg.cn/blog_migrate/8940f9ce5ce6a09d306474d5bbb102bd.png)
.NET技术的未来
查查过去几年微软的动作,你便知道.NET技术的未来会是怎么样。
- 重写.NET平台.NET Core,并开源
- Visual Code IDE - 后来者居上
- 微软云平台Azure的发展
- 收购GitHub,发力开源社区
- 微软股票的市值