自1995年互联网战略日以来最雄心勃勃的事业 —— 微软.NET战略, 2000年6月30日。  

  微软公司于2002年2月13日正式推出第一代.NET平台 .NET Framewrok 1.0。借助于自家强大易用的 Windows 系统,.NET Framework1.0 主要提供了面向 Windows 桌面(Windows Form)和服务器(ASP.NET Web Forms)的基础开发框架。在宇宙第一IDE(Visual Studio)中使用这两款框架进行业务系统开发,框架中都提供了功能强大的控件、组件,开发者通过可视化编程方式进行开发就非常容易上手,而且开发速度非常快,因此.NET平台深受全世界开发者的喜爱,发展一路顺风顺水。

  在.NET(旧称.NET Framework )发展过程中,其最大的竞争对手就是Java。Java是主打敏捷开发、跨平台的编程语言,自1995年推出Java正式版以来,凭借其天生的跨平台(Windows、Linux、MacOS)优势,发展至今在全世界开发者市场与生态圈层面远远超过.NET平台。.NET Framework 与 Windows 平台深度绑定,无法做到跨平台,所以一直处于被Java压制的状态。

  互联网技术飞速发展至今,传统的桌面程序与Web应用已无法满足各行各业的多场景应用需求。云计算、人工智能、大数据以及云原生等新兴技术方向在现代IT时代掀起了一波又一波浪潮。传统的 .NET Framework 技术极大地限制了.NET平台的应用范围与发展,面对如此尴尬的局面与现状,微软审时度势,于2014年推出跨平台解决方案.NET Core。

  2014年11月12日,微软ASP.NET之父Scott Guthrie 在 Connect 全球开发者在线会议上宣布,微软将开源全部的.NET Core 运行时,并将.NET 扩展为可在Linux和maxOS平台上开发与运行,从而让.NET应用实现跨平台。

dotnet/runtime 开源地址:https://github.com/dotnet/runtime

dotnet/core 发行日志:     https://github.com/dotnet/core/tree/main/release-notes

  .NET Core 的推出是微软.NET技术发展史上又一个重要里程碑。.NET Core是.NET技术的重要变革,它将全世界.NET开发者带入一个全新的开发领域。

1、.NET Core 定义

  .NET Core is a free, cross-platform, open-source developer platform for building many different types of applications. 这是微软官方给出的定义:.NET Core是一个免费、跨平台、开源的开发平台,用于构建许多不同类型的应用程序。

  .NET Core 设计目标有包含:

  • 支持或可以移转 (port) 到更多的操作系统平台与芯片架构 (未来项目会跨出 x86 平台。目前已至此x64、arm)。
  • 具有引人注目的性能与高可靠度。
  • 开发人员能快速与直接的获取 .NET Core 开发环境。
  • 在直觉与具生产力的情况下建造应用程序,使用文件,示例与 NuGet 组件。
2、.NET Core 核心功能

  .NET Core 是由许多项目所组成,除了基本的类库(Core FX) 之外,也包含采用 RyuJIT 编译的运行平台 Core CLR、编译器平台.NET Compiler Platform、采用 AOT 编译技术运行最优化的包 Core RT (.NET Core Runtime),以及跨平台的 MSIL 编译器 LLILC (LLVM-based MSIL Compiler) 等项目。
  同时,微软也发展了一个建置技术文件的平台docfx, 并运用于 .NET Core 的文件网站。

  • Roslyn  

  .NET Compiler Platform (项目代码为 Roslyn) 是将 .NET平台的编译架构标准化的平台,它可提供程序管理工具 (如集成开发环境) 相当多的情报,用以发展有助于编写程序与管理程序结构所需要的功能,例如类型信息、语法结构、参考链接、语义、编译器、自动化、错误回报等等功能,只要是遵循 CLI 标准的编程语言,都可以利用 .NET Compiler Platform 实现出编译器,让程序管理工具能实现如语法提示、语法自动完成、关键字高亮等可视化能力。

  .NET Compiler Platform 可同时支持 .NET Framework 4.6 以上版本,.NET Core 也原生支持。

  • RyuJIT

  RyuJIT 是微软发展的新式即时编译器 (Just-in-Time Compiler),用以替换现有的 .NET Framework 的 JIT 以及 JIT64 即地编译器,依据微软公布的测试报告,RyuJIT 的性能较前一代的 JIT 提升约 25%,并支持SIMD(Single Instruction, Multiple Data) 的技术。RyuJIT 同时应用于 .NET Framework 4.6 以及 .NET Core  。

  • Core CLR

  Core CLR 移植 .NET Framework 的 CLR 的功能,包含核心程序库 mscorlib、JIT 编译器、垃圾收集器 (GC) 以及其他运行 MSIL 所需要的运行期环境。

  • Core RT

  Core RT 是以AOT (Ahead-of-time) 编译方式为主的核心功能,在 .NET Core 内称为 Core RT,在 UWP 则是称为 .NET Native。
  Core RT 会在建造时期 (非运行期) 在编译时将 MSIL 转换成平台本地的机器码,以获取较短的引导时间 (JIT 采用的是运行时期编译,使得引导时间拉长),以及内存用量减少的优点。Core RT 会在不同的平台使用不同的 AOT 技术:

 · Windows 上使用的是 .NET Native。
         · macOS 与 Linux 上使用的是 LLILC (同时支持 JIT 和 AOT)。

  • LLILC

  LLILC (LLVM-based MSILCompiler,英文发音为 "lilac") 是 .NET Core 在非 Windows 平台的 MSIL 编译器 ,基于 ECMA-335 (Common Language Infrastructure) 的标准将 MSIL 编译成原生码运行,适用于可运行 LLVM 的操作系统,例如 macOS与 Linux 操作系统。LLILC 同时支持 JIT (内含 RyuJIT 的实现) 以及 AOT (未来将开始支持) 的编译方式。

  • CoreFX(.NET Core Libraries)

  CoreFX主要包含数个公共库,例如 System.Collections, System.IO, System.Xml等。CoreFX是 .NET Standard Library 的实现,同样的.NET Framework 4.6.3也是基于.NET Standard Library的实现。它们目前都是基于.NET Standard Library1.6版本,具体见下表:

  开源地址:https://github.com/dotnet/corefxlab

3、.NET Core 包管理

  .NET Core 的类库采用 NuGet 包化的架构,应用程序只需要使用 project.json 的 dependencies 区块加入指定包版本的参考,就能获得该包的功能,与以往 .NET Framework 大包式的提供方法完全不同。.NET Core 团队宣布己经有 98% 的 .NET Framework 主要类库移转到 .NET Core 平台。

.NET Standard Library 是一个总括型的 NuGet Package,其内包含了这些类库包:
  • Microsoft.DotNet.CoreHost
  • NETStandard.Platform
  • System.Collections.Concurrent
  • System.Linq
  • System.Runtime.Numerics
  • System.Text.RegularExpressions
其中的 NETStandard.Platform 也是一个总括型包,包含了下列类库包:
  • Microsoft.NETCore.Platforms
  • Microsoft.NETCore.Runtime
  • Microsoft.Win32.Primitives
  • System.AppContext
  • System.Collections
  • System.Diagnostics.Debug
  • System.Diagnostics.Tools
  • System.Diagnostics.Tracing
  • System.Globalization
  • System.Globalization.Calendars
  • System.IO
  • System.IO.FileSystem
  • System.IO.FileSystem.Primitives
  • System.Net.Primitives
  • System.Net.Sockets
  • System.Reflection
  • System.Reflection.Extensions
  • System.Reflection.Primitives
  • System.Reflection.TypeExtensions
  • System.Runtime
  • System.Runtime.Extensions
  • System.Runtime.Handles
  • System.Runtime.InteropServices
  • System.Runtime.InteropServices.RuntimeInformation
  • System.Text.Encoding
  • System.Text.Encoding.Extensions
  • System.Threading
  • System.Threading.Tasks
  • System.Threading.Timer
开发人员只需要使用 NETStandard.Library 就能加入所有必要的 .NET Core 类库参考,但若不需要这么多组件,也可以只加入特定的包即可,不一定都要加入 NETStandard.Library。
4、.NET Core 支持的应用程序类型

  .NET Core 基于跨平台能力,并没有将与 GUI 高度相关的 API 移植到 .NET Core 内,因此像是Windows Forms或是Windows Presentation Foundation(WPF) 并未移植到 .NET Core。.NET Core 支持控制台应用程序 (Console Application) 以及类库 (Class Library) 类型的项目。

  不过微软在其Universal Windows Platform(UWP) 开发平台使用了 .NET Core ,并且利用 .NET Native 技术将其性能提升至十分接近原生码的速度。
  ASP.NET Core 则以控制台应用程序驱动其托管环境 Kestrel Server 以支持 ASP.NET Core 程序的运行。
  .NET CLI (Command-Line Interface) 指令列工具是 .NET Core 处理建造、运行与编辑工作的主要工具 ,有几个主要的动作:

指令
帮助
dotnet new
产生新的基本 .NET 项目内容 (包含 project.json、Program.cs 以及 NuGet.config)
dotnet restore
还原所参考的 NuGet 包
dotnet build
建造 .NET 项目
dotnet publish
产生可发行的 .NET 项目 (包含所属的 Runtime)
dotnet run
编译与立即运行 .NET 项目 (较适用于 exe 型项目)
dotnet repl
引导交互式的对话
dotnet pack
将项目的产出封装成 NuGet 包
 

提示:命令都是神一般的存在,我们凡人还是使用 Visual Studio 进行开发、编译、发布,效率最高。

5、.NET Core 与其他平台的关系

  .NET Core 经常会拿来与其他平台做类比,尤其是它的源头 .NET Framework 以及另一个相似性质的开源平台 Mono。

  .NET Framework
  据微软的帮助文档介绍,.NET Core 和 .NET Framework 是子集 (Subset) 与超集 (Superset) 的关系,.NET Core 将会实现出部分的 .NET Framework 功能 (基本上是不含用户界面的部分),例如 JIT (.NET Core 采用 RyuJIT)、垃圾收集器 (GC) 以及类型 (包含基本类型以及泛型类型等)。未来 .NET Framework 和 .NET Core 也将会是各自发展,但它们也会同时使用彼此的功能,例如 .NET Compiler Platform 与 RyuJIT 等技术。
 
  Mono
  Mono 是另一个已发展许久的 .NET Framework 跨平台开源版本,基本上并不隶属微软官方,而是由社区的力量所主导,自成一个生态系统,也开发出了像Xamarin这样的跨平台.NET移动应用,.NET Core 与 Mono 未来会是合作的关系,Mono 仍会维持社区力量的维护与发展,而 .NET Core 则会以官方角度来进行发展,两边也会一起进行彼此功能上的增进 。
 
  与 ASP.NET Core 的关系
  .NET Core 与 ASP.NET Core 的关系其实一开始并不是主从关系  ,ASP.NET Core 的开发初期 (ASP.NET 5) .NET Core 还没有开始起跑,因此 ASP.NET Core 当时有自己的运行期与工具,一开始称为 Project K,后来改为 DNX (.NET Execution Environment),DNX 本身就具有可独立运作的运行能力,不需要依赖 .NET Core 运行,但是这样会变成 .NET Core 和 ASP.NET Core 双头马车的现象,在 .NET Core 逐渐成熟之后,微软也决定要将这两个各自独立发展的产品线集成在一起,DNX 也将因改用 .NET Core 运行期而终止开发,DNX 的功能将由 .NET Core 以及旗下的 .NET CLI 接替提供,集成后的版本将在 1.0 RC2 时发布。
 
6、.NET Core 支持的操作系统

  下表列出了当前支持的 .NET 版本以及支持它们的 Windows 版本。 这些版本在 .NET 版本达到支持终止日期Windows 版本达到生命周期之前仍受支持。

Windows 10 版本终止服务日期按版本分段。 下表中仅考虑家庭版、专业版、专业教育版和专业工作站版。 查看 Windows 生命周期事实表单,了解具体的详细信息。

    • 不支持的版本

        以下 .NET 版本 不再受到支持:

7、.NET Core 支持开发的应用程序
 

.NET Core/.NET6 平台目前支持7大应用方向:桌面应用、Web、游戏、移动APP、云计算、AI + IOT、大数据。

参考链接

【1】https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md

【2】https://github.com/dotnet/corefx

【3】https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/glossary.md

【4】https://www.microsoft.com/net/core#windows

【5】https://msdn.microsoft.com/en-us/library/dn807190(v=vs.110).aspx

【6】https://blogs.msdn.microsoft.com/dotnet/2013/09/30/ryujit-the-next-generation-jit-compiler-for-net/

【7】https://zh.wikipedia.org/wiki/.NET_Core

.NET平台系列5 .NET Core 简介的更多相关文章

  1. .NET 平台系列6 .NET Core 发展历程

    系列目录     [已更新最新开发文章,点击查看详细] 在我的上一篇博客<.NET平台系列5 .NET Core 简介>中主要介绍了.NETCore的基本情况,主要包括.NET跨平台的缘由 ...

  2. .NET平台系列7 .NET Core 体系结构详解

    系列目录     [已更新最新开发文章,点击查看详细]   .NET Core 是基于.NET Framework 为基础,借鉴了其优秀的思想与强大的功能,经过重新设计与构建,实现了.NET Fram ...

  3. .NET平台系列9 .NET Core 3.0 / .NET Core 3.1 详解

    系列目录     [已更新最新开发文章,点击查看详细] .NET Core 3.0 于 2019年9月23日发布,重点是增加对同时支持使用 Windwos Forms.WPF 和 Entity Frm ...

  4. .NET平台系列8 .NET Core 各版本新功能

    系列目录     [已更新最新开发文章,点击查看详细] .NET Core 自2016年6月27日发布第一个正式版本以来,它主打的跨平台和高性能特效吸引了许多开发者,包括Java.PHP等语言的开发者 ...

  5. .NET平台系列目录

    本系列主要讲解微软.NET平台发展历程以及.NET框架技术.包含.NET Framework..NET Core.Xamarin..NET Standrad等技术与应用. 1..NET平台系列 .NE ...

  6. .NET平台系列22:.NET Core/.NET5/.NET6 对比 .NET Framework

    系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<.NET平台系列2 .NET Framework 框架详解>与 <.NET平台系列7 .NET Core 体系结构 ...

  7. .NET平台系列23:.NET Core/.NET5/.NET6 和 .NET Framework 的选择建议

    系列目录     [已更新最新开发文章,点击查看详细] 有两种支持的 .NET 实现可用于生成服务器端应用: .NET Framework .NET Core/5+,包括 .NET Core..NET ...

  8. ASP.NET Core系列(一): .NET Core简介及安装开发环境

    大家都知道Java是跨平台的,.NET因为不具有跨平台的特性,被越来越多的开发者诟病,之前有各种间接的跨平台的方案,比如mono.但是由于各种兼容问题,最终 .NET Core出现了,它可以让程序在W ...

  9. [.net core]简介(转)

    原文地址:https://docs.microsoft.com/zh-cn/dotnet/articles/core/ NET Core 是一个通用开发平台,由 Microsoft 和 GitHub  ...

随机推荐

  1. android分析之消息处理

    前序:每个APP对应一个进程,该进程内有一个ActivityThread的线程,称为主线程(即UI主线程),此外,还有其他线程,这个再论. android的消息系统分析. 每个Thread只对应一个L ...

  2. Raft共识算法详解

    Raft共识算法 一.背景 拜占庭将军问题是分布式领域最复杂.最严格的容错模型.但在日常工作中使用的分布式系统面对的问题不会那么复杂,更多的是计算机故障挂掉了,或者网络通信问题而没法传递信息,这种情况 ...

  3. Python读写配置文件模块--Configobj

    一.介绍 我们在项目的开发过程中应该会遇到这样的问题:我们的项目读取某个配置文件,然后才能按照配置的信息正常运行服务,当我们需要对修改服务的某些信息时,可以直接修改这个配置文件,重启服务即可,不用再去 ...

  4. CSS垂直布局

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  5. Linux入门视频笔记三(常用工具集)

    一.全局变量(Linux中的全局变量指在整个系统中都能用的变量) 1.USER:当前登录系统的用户的用户名 2.HOME:当前用户的主目录 cd $HOME 或 cd ~可以进入用户主目录 3.PAT ...

  6. RabbitMQ 入门 (Go) - 2. 发布和接收消息

    本文我将使用 Go 语言在 RabbitMQ 上发布和接收消息. Go 的标准库本身并没有 RabbitMQ 的原生绑定,但是有一个第三方库确能够支持 RabbitMQ,它的源码在 https://g ...

  7. 如何从 dump 文件中提取出 C# 源代码?

    一:背景 相信有很多朋友在遇到应用程序各种奇葩问题后,拿下来一个dump文件,辛辛苦苦分析了大半天,终于在某一个线程的调用栈上找到了一个可疑的方法,但 windbg 常常是以 汇编 的方式显示方法代码 ...

  8. 消息队列高手课,带你从源码角度全面解析MQ的设计与实现

    消息队列中间件的使用并不复杂,但如果你对消息队列不熟悉,很难构建出健壮.稳定并且高性能的企业级系统,你会面临很多实际问题: 如何选择最适合系统的消息队列产品? 如何保证消息不重复.不丢失? 如果你掌握 ...

  9. 浅谈在c#中使用Zlib压缩与解压的方法

    作者:Compasslg 介绍 近期用c#开发一个游戏的存档编辑工具需要用 Zlib 标准的 Deflate 算法对数据进行解压. 在 StackOverflow 上逛了一圈,发现 c# 比较常用到的 ...

  10. 生活随笔:Furious 7:人生的路口,你先向西,但终点只有一个

       FOR PAUL It's never goodbye see you again         "他永远都是我们的家人."Dom起身准备离开 Letty问他,你打算不告而 ...