微软.net core目前已更新至3.0版本,其技术风险已经比较低,今天对相关其技术特性做一个简单的介绍。
.NET Core的特点:
·跨平台:可在 Windows、macOS 和 Linux 操作系统上运行。
·跨体系结构保持一致:在多个体系结构(包括 x64、x86 和 ARM)上以相同的行为运行代码。
·命令行工具:包括可用于本地开发和持续集成方案中的易于使用的命令行工具。
·部署灵活:可以包含在应用或已安装的并行(用户或系统范围安装)中。 可搭配Docker 容器使用。
·兼容性:.NET Core 通过 .NET Standard 与 .NET Framework、Xamarin 和 Mono 兼容。
·开放源代码:.NET Core 平台是开放源代码,使用 MIT 和 Apache 2 许可证。.NET Core 是一个.NET Foundation 项目。
·由 Microsoft 支持:.NET Core 由 Microsoft该项目提供支持。
语言
可以使用 C#、Visual Basic 和 F# 语言编写适用于.NET Core 的应用程序和库。这些语言可在你喜欢的文本编辑器或集成开发环境 (IDE) 中使用,包括:
Visual Studio
Visual Studio Code
Sublime Text
Vim
这种集成部分由OmniSharp和Ionide项目的参与者提供。
API
.NET Core 公开了多种方案的 API,以下介绍了几种:
基元类型,例如bool和int。
集合,例如System.Collections.Generic.List和System.Collections.Generic.Dictionary。
实用类型,例如System.Net.Http.HttpClient和System.IO.FileStream。
数据类型,例如 System.Data.DataSet和DbSet。
高性能类型,例如 System.Numerics.Vector和Pipelines。
.NET Core 通过实现 .NET Standard 规范提供 .NET Framework 和 Mono API 的兼容性。
框架
在.NET Core 之上建立了多个框架:
ASP.NET Core
Windows 10 通用 Windows 平台 (UWP)
Tizen
撰写
.NET Core 包括以下部分:
.NET Core 运行时:提供类型系统、程序集加载、垃圾回收器、本机互操作和其他基本服务。.NET Core 框架库:提供基元数据类型、应用编写类型和基本实用程序。
ASP.NET 运行时:提供一个框架来生成基于云且连接到 Internet 的新式应用程序,例如 Web 应用、IoT 应用和移动后端。
.NET Core CLI 工具和语言编译器(Roslyn 和 F#):提供 .NET Core 开发人员体验。
dotnet 工具:用于启动 .NET Core 应用和 CLI 工具。 它选择运行时并托管运行时,提供程序集加载策略并启动应用和工具。
这些组件采用以下方式分布:
.NET Core 运行时 -- 包括 .NET Core 运行时和框架库。
ASP.NET Core 运行时 -- 包括 ASP.NET Core 和 .NET Core 运行时以及框架库。
.NET Core SDK -- 包括 .NET CLI 工具、ASP.NET Core 运行时以及 .NET Core 运行时和框架。
开源
.NET Core是开源的(MIT 许可证),由 Microsoft 于 2014 年提供给 .NET Foundation。它现在是最活跃的 .NET Foundation 项目之一。个人和公司可出于个人、学术或商业等目的对其进行使用。许多公司将 .NET Core 用作应用、工具、新平台和托管服务的一部分。其中某些公司在 GitHub 上为 .NET Core 做出了巨大贡献,并作为.NET Foundation Technical Steering Group(.NET Foundation 技术控制组)的成员为产品方向提供指导。
针对适应性而设计
经过构建,.NET Core 与其他 .NET 产品非常相似,但也存在独特性。 它旨在实现对新平台和工作负荷广泛的适应性,还提供了多个 OS 和 CPU 端口(且可能会移植到更多端口上)。
该产品分为几个部分,使各个部件能够在不同的时间适应新的平台。 必须将运行时和特定于平台的基础库作为一个单元进行移植。 与平台无关的库应在所有平台上按照构建的原样运行。 在减少特定于平台的实现来提高开发人员效率方面存在项目偏差,但每当可以此方式全部或部分实现算法或 API 时,都应首选与平台无关的 C# 代码。
人们经常会问,为支持多个操作系统应如何实现 .NET Core。 他们还会问是否存在单独的实现,或是否使用 conditional compilation(条件编译)。 这两者都在用,但强烈偏向条件编译。
可以在下面的图表看出大多数 CoreFX 都是与平台无关的代码,该代码可在所有平台共享。 不限平台的代码可实现为在所有平台上使用的单个可移植程序集。
Windows 和 Unix 实现大小相似。
Windows 的实现范围更广,这是因为 CoreFX 会实现某些仅适用于 Windows 的功能(如 Microsoft.Win32.Registry),但尚未实现很多仅适用于 Unix 的概念。你还将发现大多数 Linux 和 macOS 实现都跨 Unix 实现共享,而特定于 Linux 和 macOS 的实现大小大致相同。
.NET Core 中既存在平台特定的库,也存在与平台无关的库。
可以查看几个示例中的模式:
CoreCLR是特定于平台的,它建立在内存管理器和线程计划程序等操作系统子系统的基础上。
考虑到每个OS上的存储和加密API 都有所不同,System.IO和System.Security.Cryptography.Algorithms是特定于平台的。
考虑到它们是通过数据结构创建和操作,System.Collections和System.Linq是与平台无关的。
与其他 .NET 实现比较
通过将 .NET Core 与现有的 .NET 实现进行比较,可能更容易了解其大小和形状。
与 .NET Framework 比较
.NET 由 Microsoft 于 2000 年首次发布,而后发展至今。近20年以来,.NET Framework 一直是 Microsoft 出品的主要 .NET 实现。
.NET Core 和 .NET Framework 的主要差异在于:
应用模型-- .NET Core 并非支持全部 .NET Framework 应用模型。 具体而言,它不支持 ASP.NET Web 窗体和 ASP.NET MVC,但支持 ASP.NET Core MVC。 自 .NET Core 3.0 起,.NET Core 还支持 WPF 和 Windows 窗体(仅限在 Windows 上)。
API-- .NET Core 包含 .NET Framework 基类库的一个大型子集,但具有不同的组成要素(程序集名称不同;类型上公开的成员在关键用例中不同)。在某些情况下,这些差异要求进行更改,以将源移植到 .NET Core 中(可参阅.NET 可移植性分析器;.NET Core 实施;.NET Standard API 规范)。
子系统 -- .NET Core 实现 .NET Framework 中子系统的子级,目的是实现更简单的实现和编程模型。例如,不支持代码访问安全性 (CAS),但支持反射。
平台-- .NET Framework 支持 Windows 和 Windows Server,而 NET Core 还支持 macOS 和 Linux。
开源-- .NET Core是开源的,而.NET Framework 的只读子集是开源的。
虽然 .NET Core是唯一的且与 .NET Framework 和其他 .NET 实现大不相同,但可使用源或二进制共享技术在这些实现之间轻松共享代码。
由于 .NET Core 支持并行安装及其运行时完全独立于 .NET Framework,它可以安装在装有.NET Framework 的计算机上,不会出现任何问题。
与 Mono 比较
Mono是 .NET 的原始跨平台。它一开始是用作 .NET Framework 的开放源代码替代项,之后随着 iOS 和 Android 设备变得流行,过渡到面向移动设备。可将它看作是 .NET Framework 的社区克隆。Mono 项目团队依赖于 Microsoft 发布的开放.NET 标准(尤其是 ECMA 335)来实现兼容性。
.NET Core 和 Mono 的主要差异在于:
应用模型-- Mono 通过 Xamarin 产品支持部分.NET Framework应用模型(例如Windows窗体)和其他移动开发辅助模型(例如 Xamarin.iOS)。而.NET Core 不支持 Xamarin。
API-- Mono 使用相同程序集名称和组成要素支持 .NET Framework API 的大型子集。
平台-- Mono支持很多平台和 CPU。
开源-- Mono和.NET Core 两者都使用MIT许可证,且都属于.NET Foundation 项目。
焦点-- 最近几年,Mono 的主要焦点是移动平台,而 .NET Core 的焦点是云和桌面工作负载。
未来动向
已宣布.NET 5 将成为 .NET Core 的下一版本且表示平台实现统一。此项目旨在以几项关键方法来改进.NET:
生成可随处使用且提供统一运行时行为和开发人员体验的单一 .NET 运行时和框架。
通过充分利用 .NET Core、.NET Framework、Xamarin 和 Mono 来扩展 .NET 的功能。
根据单个基本代码构建开发人员(Microsoft 和社区)可处理且协同扩展,同时可改善所有方案的产品。
摘译自微软.