学习一门新的技术,最好先宏观地了解它的特性,能做什么,擅长做什么。你总得先认识它,才能深入的了解它。

先来说一下.NET。.NET是微软推出的开发平台,用于构建各种类型的应用,比如:Web、手机、桌面、游戏以及物联网区块链等。在.NET规范中,.NET本来是平台无关的,但是微软官方只针对Windows实现了.NET,也就是.NET Framework,一些不了解情况的开发者误以为.NET不能跨平台。除了官方的.NET Framework,还有一个社区的开源版本Xamarin/Mono,它是跨平台的实现。那么 .NET Core又是什么呢?.NET Core也是.NET的一种跨平台实现,基于 .NET Core开发的应用可以运行在Windows、Linux和macOS上,它具有轻量、速度极快以及模块化等优点。

.NET Core 是一个开源项目,它的运行时、基础库、编译器、工具包等都在GitHub上开源,由微软和社区共同维护。它的开源地址是:https://github.com/dotnet。  .NET Core支持 C#、VB 和 F# 编程语言,并且利用 .NET Standard 库可以针对不同的平台使用相同的代码。.NET Core 基于模块化开发,只需要依赖最小部分,同时它使用包进行分发,可以快速更新。

接下来,明哥会分5篇文章,分别从 .NET Core的组成、理解包、元包、理解.NET Standard、.NET Core平台支持情况以及.NET Core的应用分别介绍.NET Core。


扩展阅读

ECMA-335 规范

当初微软发布C#语言和.NET平台时,也发布了一套文档,后来这些文档提交到ECMA,被ECMA批准成为了国际标准ECMA-334ECMA-335。ECMA-334是C#语言规范,ECMA-335是公共语言基础设施(CLI)规范。虽然 .NET Framework 和 .NET Core 都实现了 ECMA-335,但 .NET Framework 只是针对 Windows 的实现,并不能跨平台。从易于理解的角度,可以认为 .NET Core 是 .NET Framework 的新一代版本,新增了其他平台的支持或者说重写了.NET Framework,但不只是简单的重写。

.NET Framework 为什么不能跨平台?

为了更好的理解 .NET Core,有必要解释一下 .NET Framework 为什么不能跨平台,而 .NET Core 可以跨平台。我们知道.NET程序首先是把源代码编译成 CIL,也就是通用中间语言,无论你用的编程语言是C#,还是VB,都会被编译成CIL。CIL是不能直接在机器上运行的,它需要运行在.NET运行时上,这里.NET运行时可以理解为虚拟机。.NET运行时包含将CIL编译成机器码的即时编译器,程序运行时,它会把 CIL 一句一句地编译成机器码执行。.NET Framework 不能跨平台,一方面是因为它的运行时只是针对Windows实现的,不能将CIL编译成其他平台的指令。另一方面,基础库不能跨平台,比如 Windows 和 Linux 的文件系统是不一样的,.NET Framework 只是实现了 Windows 文件系统的操作,还有像Windows Forms、WPF 这种Windows平台特有的技术也是不能跨平台的。