.NET曾是在Windows平台上创建应用程序的杰出技术,但是在移动互联网时代营养不良,变得消瘦。但现在,.NET不仅仅是在Windows平台、也是在Linux和Mac平台上创建应用程序的杰出技术;.NET的大腿又逐渐变粗,壮汉慢慢归来。
.NET技术体系
.NET技术栈主要包含哪些内容?下图给出了.NET体系的一个整体结构。
使用.NET Framework,可以创建Windows Form、WPF和在Windows上运行的旧ASP.NET应用程序;
使用.NET Core,可以创建运行在不同平台上运行的ASP.NET Core和控制台应用程序。.NET Core也可以创建通用Windows应用(UWP)程序,但UWP只能在Windows平台上运行;因为UWP仍使用了Windows运行库,因此它只能在Windows上使用。
Xamarin平台,基于Mono框架,可以使用C#为iPhone和Android开发应用程序。Xamarin提供了Xamarion.IoS和Xamarin.Android库,使用Xamrian.Forms就可以在两个移动平台之间共享用户界面。
如上图,.NET Framework,.NET Core和Mono基于.NET Standard(一个标准)构建,他们可以使用相同的库,共享相同的编译器平台、编程语言和运行库组件。
.NET Framework
.NET Framework目前的最新版本是4.8,是在过去十几年(快20年了)不断增强的结果。过去很长一段时间使用它来构建基于Windows的Window Form、WPF和ASP.NET应用程序,而且将来也会继续持续一段时间;但它是封闭的。
Version | Date | .NET Framework | CLR | Visual Studio |
---|---|---|---|---|
C# 1.0 | 2002.01 | .NET Framework 1.0 | 1.0 | VS 2002 |
C# 1.1 C# 1.2 |
2003.10 | .NET Framework 1.1 | 1.1 | VS 2003 |
C# 2.0 | 2005.11 | .NET Framework 2.0 | 2.0 | VS 2005 |
C# 3.0 | 2007.11 | .NET Framework 2.0 .NET Framework 3.0 .NET Framework 3.5 |
2.0 | VS 2008 VS 2010 |
C# 4.0 | 2010.04 | .NET Framework 4 | 4.0 | VS 2010 |
C# 5.0 | 2012.08 | .NET Framework 4.5 .NET Framework 4.5.1 |
4.0 | VS 2012 VS 2013 |
C# 6.0 | 2015.07 | .NET Framework 4.6 | 4.0 | VS 2015 |
C# 7.0 | 2017.03 | .NET Framework 4.6.2 | 4.0 | VS 2017 |
C# 7.1 | 2017.08 | .NET Framework 4.7 | 4.0 | VS 2017 v15.3 |
C# 7.2 | 2017.11 | .NET Framework 4.7.1 | 4.0 | VS 2017 v15.5 |
C# 7.3 | 2018.05 | .NET Framework 4.7.2 | 4.0 | VS 2017 v15.7 |
C# 8.0 | 2019.10 | .NET Framework 4.8 | 4.0 | VS 2019 v16.3 |
.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应用:ASP.NET Core > ASP.NET > ASP.NET Web Forms / WCF
天下合久必分,分久必合,.NET在今年年底将会统一各平台,统一命名为.NET 5。
现在的.NET Core和未来的.NET技术栈的设计目标:
.NET技术的未来
查查过去几年微软的动作,你便知道.NET技术的未来会是怎么样。
- 重写.NET平台.NET Core,并开源
- Visual Code IDE - 后来者居上
- 微软云平台Azure的发展
- 收购GitHub,发力开源社区
- 微软股票的市值