自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开发者带入一个全新的开发领域。
.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 组件。
.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
.NET Core 的类库采用 NuGet 包化的架构,应用程序只需要使用 project.json 的 dependencies 区块加入指定包版本的参考,就能获得该包的功能,与以往 .NET Framework 大包式的提供方法完全不同。.NET Core 团队宣布己经有 98% 的 .NET Framework 主要类库移转到 .NET Core 平台。
- Microsoft.DotNet.CoreHost
- NETStandard.Platform
- System.Collections.Concurrent
- System.Linq
- System.Runtime.Numerics
- System.Text.RegularExpressions
- 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
.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 进行开发、编译、发布,效率最高。
.NET Core 经常会拿来与其他平台做类比,尤其是它的源头 .NET Framework 以及另一个相似性质的开源平台 Mono。
下表列出了当前支持的 .NET 版本以及支持它们的 Windows 版本。 这些版本在 .NET 版本达到支持终止日期或 Windows 版本达到生命周期之前仍受支持。
Windows 10 版本终止服务日期按版本分段。 下表中仅考虑家庭版、专业版、专业教育版和专业工作站版。 查看 Windows 生命周期事实表单,了解具体的详细信息。
- 在 Windows 上安装 .NET (参考:https://docs.microsoft.com/zh-cn/dotnet/core/install/windows?tabs=net50)
- 支持的版本
- 不支持的版本
以下 .NET 版本 不再受到支持:
- 在 macOS 上安装 .NET(参考:https://docs.microsoft.com/zh-cn/dotnet/core/install/macos)
- 在 Linux 上安装 .NET (参考:https://docs.microsoft.com/zh-cn/dotnet/core/install/linux)
.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/