关于 .NET CoreAbout .NET Core
- 跨平台: 可在 Windows、macOS 和 Linux 上运行。
- 跨体系结构保持一致: 在多个体系结构(包括 x64、x86 和 ARM)上以相同的行为运行代码。
- 命令行工具: 包括可用于本地开发和持续集成方案中的易于使用的命令行工具。
- 部署灵活: 可以包含在应用或已安装的并行(用户或系统范围安装)中。可搭配 Docker 容器使用。
- 兼容性: .NET Core 通过 与 .NET Framework、Xamarin 和 Mono 兼容。
- 开放源代码: .NET Core 平台是开放源代码,使用 MIT 和 Apache 2 许可证。.NET Core 是一个 .NET Foundation 项目。
可以使用 C#、Visual Basic 和 F# 语言编写适用于 .NET Core 的应用程序和库。这些语言可在你喜欢的文本编辑器或集成开发环境 (IDE) 中使用,包括:
- Visual Studio Code
- Sublime Text
- Vim这种集成部分由 和 Ionide 项目的参与者提供。
APIAPIs
.NET Core 公开了多种方案的 API,以下介绍了几种:
- 基元类型,例如 和 int。
- 集合,例如 和 System.Collections.Generic.Dictionary
。 - 实用程序类型,例如 和 System.IO.FileStream。
- 数据类型,例如 和 DbSet。
- 高性能类型,例如 和 Pipelines。.NET Core 通过实现 规范提供 .NET Framework 和 Mono API 的兼容性。
在 .NET Core 之上建立了多个框架:
撰写Composition
.NET Core 包括以下部分:
- :提供类型系统、程序集加载、垃圾回收器、本机互操作和其他基本服务。.NET Core 框架库:提供基元数据类型、应用编写类型和基本实用程序。
- :提供一个框架来生成基于云且连接到 Internet 的新式应用程序,例如 Web 应用、IoT 应用和移动后端。
- .NET Core CLI 工具和语言编译器( 和 F#):提供 .NET Core 开发人员体验。
:用于启动 .NET Core 应用和 CLI 工具。它选择运行时并托管运行时,提供程序集加载策略并启动应用和工具。这些组件采用以下方式分布:
.NET Core 运行时 — 包括 .NET Core 运行时和框架库。
- — 包括 .NET CLI 工具、ASP.NET Core 运行时以及 .NET Core 运行时和框架。
经过构建,.NET Core 与其他 .NET 产品非常相似,但也存在独特性。它旨在实现对新平台和工作负荷广泛的适应性,还提供了多个 OS 和 CPU 端口(且可能会移植到更多端口上)。
该产品分为几个部分,使各个部件能够在不同的时间适应新的平台。必须将运行时和特定于平台的基础库作为一个单元进行移植。与平台无关的库应在所有平台上按照构建的原样运行。在减少特定于平台的实现来提高开发人员效率方面存在项目偏差,但每当可以此方式全部或部分实现算法或 API 时,都应首选与平台无关的 C# 代码。
人们经常会问,为支持多个操作系统应如何实现 .NET Core。他们还会问是否存在单独的实现,或是否使用 conditional compilation(条件编译)。这两者都在用,但强烈偏向条件编译。
可以在下面的图表看出大多数 都是与平台无关的代码,该代码可在所有平台共享。不限平台的代码可实现为在所有平台上使用的单个可移植程序集。
Windows 和 Unix 实现大小相似。Windows 的实现范围更广,这是因为 CoreFX 会实现某些仅适用于 Windows 的功能(如 Microsoft.Win32.Registry),但尚未实现很多仅适用于 Unix 的概念。你还将发现大多数 Linux 和 macOS 实现都跨 Unix 实现共享,而特定于 Linux 和 macOS 的实现大小大致相同。
- 是特定于平台的。它建立在内存管理器和线程计划程序等操作系统子系统的基础上。
- 考虑到每个 OS 上的存储和加密 API 都有所不同,System.IO 和 是特定于平台的。
- 考虑到它们是通过数据结构创建和操作,System.Collections 和 是与平台无关的。
通过将 .NET Core 与现有的 .NET 实现进行比较,可能更容易了解其大小和形状。
.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 实施 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 的计算机上,不会出现任何问题。
是 .NET 的原始跨平台。它一开始是用作 .NET Framework 的开源)替代项,之后随着 iOS 和 Android 设备变得流行,过渡到面向移动设备。可将它看作是 .NET Framework 的社区克隆。Mono 项目团队依赖于 Microsoft 发布的开放 (尤其是 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 运行时和框架。
- 通过充分利用 .NET Core、.NET Framework、Xamarin 和 Mono 来扩展 .NET 的功能。
- 根据单个基本代码构建开发人员(Microsoft 和社区)可处理且协同扩展,同时可改善所有方案的产品。要详细了解当前规划的 .NET 5 发展动向,请参阅 .NET 5 简介。