关于 .NET Core

.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 依据 .NET Core 支持提供支持。

语言

可以使用 C#、Visual Basic 和 F# 语言编写适用于 .NET Core 的应用程序和库。 这些语言已集成或可以集成到你最喜欢的文本编辑器和 IDE,包括 Visual StudioVisual Studio Code、Sublime Text 和 Vim。 这种集成部分由 OmniSharpIonide 项目的高手提供。

API

.NET Core 公开了多种方案的 API,以下介绍了几种:

  • 基元类型,例如 boolint
  • 集合,例如 System.Collections.Generic.List<T>System.Collections.Generic.Dictionary<TKey,TValue>
  • 实用程序类型,例如 System.Net.Http.HttpClientSystem.IO.FileStream
  • 数据类型,例如 System.Data.DataSetDbSet
  • 高性能类型,例如 System.Numerics.VectorPipelines

.NET Core 通过实现.NET Standard规范提供 .NET Framework 和 Mono API 的兼容性。

框架

在 .NET Core 之上建立了多个框架:

撰写

.NET Core 包括以下部分:

  • .NET Core 运行时:提供类型系统、程序集加载、垃圾回收器、本机互操作和其他基本服务。 .NET Core 框架库提供基元数据类型、应用编写类型和基本实用程序。
  • ASP.NET 运行时:提供框架以生成基于新式云的 Internet 连接的应用程序,例如 Web 应用、IoT 应用以及移动后端。
  • .NET Core CLI 工具和语言编译器(RoslynF#):提供 .NET Core 开发人员体验。
  • dotnet 工具:用于启动 .NET Core 应用和 CLI 工具。 它选择运行时并托管运行时,提供程序集加载策略并启动应用和工具。

这些组件采用以下方式分布:

开放源

.NET Core 属于开放源(MIT 许可证),由 Microsoft 于 2014 年提供给 .NET Foundation。 现在它是最活跃的 .NET Foundation 项目之一。 可由个人和企业自由采用,包括用于个人、学术或商业目的。 许多公司已使用 .NET Core 作为应用、工具、新平台和托管服务的一部分。 其中某些公司对 GitHub 上的 .NET Core 做出了巨大贡献,并作为 .NET Foundation Technical Steering Group(.NET Foundation 技术控制组)的成员,指导产品方向。

针对适应性而设计

与其他 .NET 产品相比,生成的 .NET Core 与它们十分类似,但具有唯一性。 其目的是能够广泛适应新的平台和工作负载。 它提供多个 OS 和 CPU 端口,并可以移植到更多端口。

该产品分为几个部分,使各个部件能够在不同的时间适应新的平台。 必须将运行时和特定于平台的基础库作为一个单元进行移植。 与平台无关的库应在所有平台上按照构建的原样运行。 对于通过减少特定于平台的实现以提高开发人员效率方面,项目存在偏差,但每当可以以此方式全部或部分实现算法或 API 时,都应首选与平台无关的 C# 代码。

人们经常会问,为支持多个操作系统应如何实现 .NET Core。 他们还会问是否存在单独的实现,或是否使用 conditional compilation(条件编译)。 这两者都在用,但强烈偏向条件编译。

可以在下面的图表看出大多数 CoreFX 都是与平台无关的代码,该代码可在所有平台共享。 不限平台的代码可实现为在所有平台上使用的单个可移植程序集。

CoreFX:每个平台的代码行数
Windows 和 Unix 实现大小相似。 Windows 具有较大的实现,因为 CoreFX 实现了某些仅适用于 Windows 的功能,如 Microsoft.Win32.Registry,但尚未实现多个仅适用于 Unix 的概念。 你将发现大多数 Linux 和 macOS 实现都是在 Unix 实现中实现的,而特定于 Linux 和 macOS 的实现大小大致相同。

.NET Core 中混合存在特定于平台和与平台无关的库。 可以查看几个示例中的模式:

与其他 .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 将支持 WPF 和 Windows 窗体
  • API – .NET Core 包含 .NET Framework 基类库的一个大型子集,但具有不同的组成要素(程序集名称不同;类型上公开的成员在关键用例中不同)。 这些差异需要在某些情况下更改 .NET Core 的端口源(请参阅 microsoft/dotnet-apiport)。 .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 实现大不相同,但使用源或二进制共享技术在这些实施之间分享代码仍很简单。

与 Mono 比较

Mono 是原始的跨平台和 开放源 .NET 实现,于 2004 年首次发布。 可以把它看作是 .NET Framework 的社区克隆。 Mono 项目团队依赖于 Microsoft 发布的开放 .NET 标准(尤其是 ECMA 335),以便实现兼容性。

.NET Core 和 Mono 的主要差异在于:

  • 应用模型 – Mono 通过 Xamarin 产品支持 .NET Framework 应用模型(例如,Windows Forms)和其他应用模型(例如,Xamarin.iOS)的子集。 而 .NET Core 不支持这些内容。
  • API – Mono 使用相同程序集名称和组成要素支持 .NET Framework API 的 大型子集
  • 平台 – Mono 支持很多平台和 CPU。
  • 开放源 – Mono 和 .NET Core 两者都使用 MIT 许可证,且都属于 .NET Foundation 项目。
  • 焦点 – 最近几年,Mono 的主要焦点是移动平台,而 .NET Core 的焦点是云和桌面工作负载。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐