关于 .NET CoreAbout .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 支持提供支持。

语言Languages

可以使用 C#、Visual Basic 和 F# 语言编写适用于 .NET Core 的应用程序和库。这些语言可在你喜欢的文本编辑器或集成开发环境 (IDE) 中使用,包括:

APIAPIs

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

框架Frameworks

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

撰写Composition

.NET Core 包括以下部分:

  • .NET Core 运行时:提供类型系统、程序集加载、垃圾回收器、本机互操作和其他基本服务。.NET Core 框架库:提供基元数据类型、应用编写类型和基本实用程序。
  • ASP.NET 运行时:提供一个框架来生成基于云且连接到 Internet 的新式应用程序,例如 Web 应用、IoT 应用和移动后端。
  • .NET Core CLI 工具和语言编译器(RoslynF#):提供 .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 运行时和框架。

开源Open source

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

针对适应性而设计Designed for adaptability

经过构建,.NET Core 与其他 .NET 产品非常相似,但也存在独特性。它旨在实现对新平台和工作负荷广泛的适应性,还提供了多个 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 实现比较Comparisons to other .NET implementations

通过将 .NET Core 与现有的 .NET 实现进行比较,可能更容易了解其大小和形状。

与 .NET Framework 比较Comparison with .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 比较Comparison with 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 的焦点是云和桌面工作负载。

未来动向The future

已宣布 .NET 5 将成为 .NET Core 的下一版本且表示平台实现统一。此项目旨在以几项关键方法来改进 .NET:

  • 生成可随处使用且提供统一运行时行为和开发人员体验的单一 .NET 运行时和框架。
  • 通过充分利用 .NET Core、.NET Framework、Xamarin 和 Mono 来扩展 .NET 的功能。
  • 根据单个基本代码构建开发人员(Microsoft 和社区)可处理且协同扩展,同时可改善所有方案的产品。要详细了解当前规划的 .NET 5 发展动向,请参阅 .NET 5 简介