目前 .NET Core 3.0 拥有的 API 总数约为 .NET Framework API 的
80%,剩下尚未从 .NET Framework 移植到 .NET Core 的
API,微软考虑以开源的形式发布。

  • 1. NET Core 2.0
    是您的最好选择吗?

    • 1.1. Net Core 2.0
      特性

      • 1.1.1. NET
        Core平台是开源的
      • 1.1.2.
        跨平台
      • 1.1.3.
        灵活部署
      • 1.1.4.
        模块化架构
      • 1.1.5.
        命令行工具
      • 1.1.6.
        云支持
    • 1.2. NET Core
      后续发展路线图

      • 1.2.1.
        已知主要版本的发布时间表
      • 1.2.2. NET Core
        发展历程
    • 1.3. NET Core 或 .NET Framework
      ?

      • 1.3.1.
        概述
      • 1.3.2. 选择.NET Core 还是.NET
        Framework
    • 1.4.
      总结

.NET Core 是一个通用开发平台,由 Microsoft 和 GitHub 上的 .NET 社区共同维护。跨平台的,支持
Windows、macOS 和 Linux,并且可用于设备、云和嵌入式/IoT 。

微软方面表示,通过 .NET Core 3.0,他们现在已具备轻松移植现代 workload
所需的所有技术,无论是桌面应用、移动应用、控制台应用,网站还是云服务。为此,他们计划将不再把
.NET Framework 上已有的技术移植到 .NET Core
3.0,并考虑使用 MIT
协议来开源不打算移植到 .NET Core 3.0 的 .NET Framework 代码库。

本月14日,微软发布.NET Core 2.0 正式版,它的发布意味着.NET
Core平台更加成熟,也预示其更美好的未来。本文将分析.NET Core
的特性以及未来发展方向,为开发人员选择在何种平台开发程序提供参考。

.NET Core以特征 :

当然不移植 API
并不是说我们在使用新技术方面没有任何机会,只是这些技术不会在 .NET
Framework 代码库中出现。

1.1. Net Core 2.0 特性

  • 部署灵活
  • 跨平台:可以在 Windows、macOS 和 Linux
    上运行;也可移植到其他操作系统。
  • 命令行支持:可在命令行中执行所有产品方案。
  • 兼容:.NET Core 通过 .NET 标准与
    .NET Framework、Xamarin 和 Mono 兼容。
  • 开源
  • 由 Microsoft 支持:.NET Core 由 Microsoft 依据 .NET Core 支持提供支持

下面我们来看看 .NET Core 和 .NET Framework 的发展历程。

1.1.1. NET Core平台是开源的

.NET Core是.NET Foundation的一部分,如下图:

图片 1

.NET
Foundation是一个围绕.NET开发框架,并不断创新的社区。微软的另一大进步就是使ASP.NET
Core开源。由于它是一个开源平台,您可以更好地控制使用和修改它,并且其代码的透明度可以为您自己的基于.NET
Core的项目提供信息和灵感。此外,您和您的伙伴可以更快地更正错误和规避安全风险,使.NET
Core更安全。.NET
Core更稳定,因为该平台工具的代码将始终保持公开。整个框架源和包可以在GitHub站点上找到。

组成

.NET Core 包括以下部分:

  • .NET
    运行时:提供类型系统、程序集加载、垃圾回收器、本机互操作和其他基本服务。
  • 一组 框架库:提供基元数据类型、应用编写类型和基本实用程序。
  • 一组 SDK
    工具和语言编译器:提供基本的开发人员体验,可用于 .NET Core SDK。
  • “dotnet”应用主机,用于启动 .NET Core 应用。
    它选择运行时并托管运行时,提供程序集加载策略来启动应用。
    同一主机还可用于以大致相同的方式启动 SDK 工具。

从 .NET Core 1.0 开始,它只有一个非常小的 API 集合,其中仅包含大约 1.8
万个 .NET Framework API。通过 .NET Standard
2.0,微软试图在 .NET
Framework, .NET Core 和 Xamarin 之间共享代码,因此 .NET Core 2.0
提供了大约 3.8 万个 .NET Frameworks API。此外,微软还构建了兼容性套件包
—— Windows Compatibility
Pack,而该套件包又让
.NET Core 增加了大约 2.1 万个 .NET Framework API。至此,前后大约有 6
万个 API 移植到了 .NET Core。

1.1.2. 跨平台

除了使其成为开放源码外,微软已经不遗余力地使其跨平台。开发人员将能够在Mac,Linux或Windows系统上开发应用程序。事实上,它还引入了专门为Mac和Linux用户提供的新的代码编辑器“Visual
Studio Code”。

语言

可以使用 C# 和 F# 语言(即将推出 Visual Basic)编写 .NET Core
的应用程序和库。 在 .NET Core 上运行的编译器可以在其运行的任何地方进行
.NET Core 开发。 一般情况下,不会直接使用编译器,但会间接使用 SDK 工具。

C# 和 F# 编译器以及 .NET Core 工具已集成到或可以集成到多个文本编辑器和
IDE 中,包括 Visual Studio、Visual Studio Code 和 Sublime Text 以及 Vim,使 .NET Core
开发可以在你钟爱的环境和 OS 中进行。 这种集成部分由 OmniSharp 项目提供。

而在最新发布的 .NET Core 3.0 中,微软又增加了 WPF 和
WinForm,因此将 .NET Framework API 移植到 .NET Core 的总数超过了 12
万,比 .NET Framework API 总数量的一半还多。

1.1.3. 灵活部署

.NET
Core的这一功能可帮助开发人员灵活部署:作为应用程序(FDD-框架依赖部署)的一部分,或作为全新的安装(SCD-独立部署)
。FDD允许您使用较小的部署包最小化内存和磁盘空间的使用,而SCD则可以完全控制项目部署(包括.NET
Core库和运行时)。

.NET API 和兼容性

可将 .NET Core 看作是 .NET Framework 在 .NET Framework 基类库 (BCL)
的跨平台版本。 它实施 .NET
标准规范。 .NET Core 提供了一个可用于 .NET Framework 或 Mono/Xamarin 的
API 子集。
在某些情况下,类型未完全实现(某些成员不可用或已移动)。

有关 .NET Core API 的详细信息,请参阅 .NET Core roadmap路标(.NET Core API
产品系列)。

图片 2

1.1.4. 模块化架构

此功能可帮助开发人员根据项目的要求仅使用必需的软件包。模块化架构有助于升级其跨平台兼容性。因此,开发人员现在可以设计轻便,高效和强大的应用程序。与以前的版本相比,新版本相对更轻,更小,这有助于加快开发过程。对文件系统进行了较大改变,将有助于搭建健壮的开发环境。

与 .NET Standard 的关系

.NET 标准是一种 API 规范,用于描述开发者可以在每个 .NET
实现代码中使用的一组一致 .NET API。 .NET
实现需要实现此规范才能被视为符合 .NET Standard ,并且才能支持面向 .NET
Standard 的库。

由于 .NET Core 可实现 .NET Standard,因此也支持 .NET Standard 库。

这里还需要指出的是,微软特意强调他们在 .NET Core 中添加了大约 6.2 万个
.NET Framework 中没有的 API,因此如果仅比较 API 的总数,那么 .NET Core
的 API 数量约占 .NET Framework API 的 80%。

1.1.5. 命令行工具

与以前的版本相比,新版本更轻,更小,这有助于提高开发效率。为了搭建健壮的开发环境,文件系统作了较大变化。可以在名为DNVM或Dot
Net版本管理器的命令行访问每个可能的产品方案。该命令行可以方便地更新和配置.NET运行时。这是.NET执行环境的补充。命令行的另一个好处就是它与平台无关,开发人员不需要一次又一次地学习工具链。一旦熟悉其使用,就可以在任何其他支持的平台或界面上使用相同的方式。

工作负载

就本身而言,.NET Core
包括单个应用程序模型(控制台应用),这对工具、本地服务和基于文本的游戏很有用。
除 .NET Core 外,还生成了其他应用程序模型以扩展其功能,例如:

  • ASP.NET Core
  • Windows 10 通用 Windows 平台 (UWP)
  • 定位 UWP 时的 Xamarin.Forms

微软表示 .NET 的未来将基于 .NET Core,在 Build 2019 大会上,微软宣布
AppDomains、远程处理、Web Forms、WCF server 以及 Windows Workflow
都不会移植到 .NET Core。目前也不再计划将任何 .NET Framework 技术移植到
.NET Core 上。前面提到微软会开源不打算移植到 .NET Core 3.0 的 .NET
Framework 代码库,希望借此为社区创造更多 OSS 项目尽一份力量。

1.1.6. 云支持

ASP.NET Core
是率先开发出保持云集成的功能。因为它支持基于云的配置,所以云端初始化设置允许开发人员将其应用程序方便发布到云端。

开放源

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

例如,目前已经有两个基于此的社区项目诞生
—— CoreWF 和 CoreWCF。

1.2. NET Core 后续发展路线图

获取

.NET Core 主要以两种方式发行,以包方式在 NuGet.org
上发行,以及以独立方式发行。

(文/开源中国)    

1.2.1. 已知主要版本的发布时间表

版本  发布时间
1.0 RC1 2016年2月15日
1.0 RC2 2016年5月16日
1.0 2016年6月27日
1.1 2016年11月16日
2.0 2017年8月14日
2.1 2017第四季度

分布

可以在 .NET Core 入门页下载 .NET
Core。

  • Microsoft.NET Core 分发包括
    CoreCLR 运行时、关联库、控制台应用程序主机和 dotnet 应用启动器。 相关描述请参见 Microsoft.NETCore.App 元包。
  • Microsoft .NET Core SDK 分发包括 .NET Core 和一套用来还原
    NuGet 数据包以及编译并生成应用的工具。

通常情况下,将首先安装 .NET Core SDK,以开始 .NET Core 开发。
可以选择安装其他 .NET Core 版本(可以是预发行版)。

1.2.2. NET Core 发展历程

** RC1 **

2016年1月 ASP.NET 5 改名 ASP.NET Core 1.0 ,所有名字变动如下图:

图片 3

1.0 RC2

.NET Core横跨各平台:,也就是说所有基于.NET Core
构建的应用模型(比如:ASP.NET Core, Console Apps 和 class
libraries)不仅可以运行在Windows系统之上,同时也可以运行在OS X 和
Linux系统之上。

1.0

微软团队提供的下载中(https://www.microsoft.com/net/download)包含了
.NET Core Runtime, .NET Core SDK, .NET Core VS Tooling (包括 Web
开发工具), .NET Core Windows Server Hosting, 以及更新的 NuGet ASP.NET
Core 1.0 和 Entity Framework Core 1.0 包。微软还发布了用于创建 .NET Core
项目的 Visual Studio 和 Visual Studio Code 扩展,以及 .NET
Documentation()。

1.1

.NET Core 1.1 发布,这个版本支持有效期三个月,后续有变动。
11/16 .NET Core 1.1 RTM 版发布。对应发布 ASP.NET Core 1.1 、EF Core
1.1。Visual Studio for Mac 也一同发布。可以通过Visual Studio 2015,
Visual Studio 2017 RC, Visual Studio Code and Visual Studio for the Mac
创建 .NET Core 1.1 的应用。

2.0

受Visual Studio 2017 15.3 版本支持,并引进了新的 Razor Pages
用户界面设计范例。对于ASP.NET
Core来说,这个版本主要简化了部署,提高了预加载页面性能.人们更关注配套的.NET
Core 2.0平台带来的变化:

  • 降低入门及学习的障碍,.NET Standard
    2.0通过标准化共享API,可以轻松地跨.NET Framework,.NET
    Core和Xamarin共享代码。
  • .NET Framework 4.6.1支持.NET Standard 2.0,.NET Standard 2.0
    添加了许多.NET Framework 4.6.1 支持的API,以及.NET Standard 2.0
    自己特有的API
  • .NET Standard 2.0 添加了 14,994 个.NET Framework 4.6.1已经支持的API
  • .NET Standard 2.0 只有 43 个 .NET Framework 4.6.1不支持的API
  • .NET Standard 2.0 将是.NET Standard 1.6的超集。 换句话说,.NET
    Standard 2.0和1.x不会发生突破性的变化。
  • .NET Framework兼容模式: 允许.NET Standard项目引用.NET
    Framework库,利用.NET的历史遗产,便于开发平台从.NET
    Framework迁移到.NET Core.

最终可以理解为.NET Core 2.0 将是等价于 .NET Framework
4.6.1,同时既有的.NET Framework代码可以很轻松的移植到.NET Core平台

  • .NET Core 包包含 .NET Core 运行时和库(引用程序集和实现)。
    例如,System.Net.Http。
  • .NET Core
    元包通过引用相应的带有版本的库包组合来描述各个层和应用模型。

1.3. NET Core 或 .NET Framework ?

体系结构

.NET Core 是一个跨平台的 .NET 实现。 .NET Core
特有的主要体系结构是为支持的平台提供特定于平台的实现。

1.3.1. 概述

.NET Framework支持Windows和Web应用程序。今天,您可以使用Windows
Forms,WPF和UWP在.NET Framework中构建Windows应用程序。ASP.NET
MVC用于在.NET Framework中构建Web应用程序。

.NET
Core是为所有操作系统(包括Windows,Mac和Linux)构建应用程序的新型开源和跨平台框​​架。.NET
Core支持UWP和ASP.NET Core,UWP用于构建Windows
10目标Windows和移动应用程序,ASP.NET
Core用于构建基于浏览器的Web应用程序。通过下图您能看到.NET
Core和以前的.NET Framework的主要功能区别:

图片 4

同样的ASP.NET Core 与 传统的 ASP.NET 也有较大区别,如下图所示:

图片 5

环境

.NET Core 由 Microsoft 在 Windows、macOS 和 Linux 上提供支持。 在 Linux
上,Microsoft 主要支持 Red Hat Enterprise Linux (RHEL) 和 Debian
分发系列上运行的 .NET Core。

.NET Core 目前支持 X64 CPU。 在 Windows 上,也支持 X86。 将支持 ARM64 和
ARM32。

有关工作负荷和 OS 以及 CPU 环境支持和计划的更详细信息,请参阅 .NET Core Roadmap(.NET Core
产品系列)。

对于其他应用类型和环境,其他公司或团体可能支持 .NET Core。

1.3.2. 选择.NET Core 还是.NET Framework

产品需求 .Net Core/Framework
使用Windows Forms和WPF的Windows客户端应用程序 .NET Framework
使用到WCF,WF等库的应用程序 .NET Framework
需要使用的第三方.NET 库或NuGet包不能用于.NET Core .NET Framework
需要使用不可用于 .NET Core 的 .NET 技术 .NET Framework
需要使用不支持 .NET Core 的平台 .NET Framework
预配置的环境和系统 .NET Framework更好
对Dockers容器支持 都支持,但.NET Core更适合
微服务 都可以,但.NET Core更适合
跨平台需求 .NET Core
需要高性能和可扩展的系统 .NET Core
需要按应用程序级别选择并行的 .NET 版本 .NET Core

针对适应性而设计

与其他 .NET 产品相比,生成的 .NET Core 与它们十分类似,但具有唯一性。
其目的是能够适应广泛的新平台、新的工作负荷和新的编译器工具链。 它有多个
OS 和 CPU 端口正在使用中,并可以移植到更多端口。 以 LLILC 项目为例,它是早期 .NET Core 通过 LLVM 编译器进行本地编译的原型。

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

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

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

 图片 6

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

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

  • CoreCLR 是特定于平台的。
    它是使用 C/C++ 生成的,因此根据构造,它是特定于平台的。
  • 考虑到每个 OS 上的存储和加密 API 具有显著差异,System.IO 和 System.Security.Cryptography.Algorithms 是特定于平台的。
  • 考虑到它们是通过数据结构创建和操作,System.Collections 和 System.Linq 是与平台无关的。

1.4. 总结

.NET
Core平台自2016年诞生到现在发展很快,这不稀奇.在它出生前微软就积累的多年.NET
Framework经验.从以上我们能看出微软的策略:

  • 第一步最重要的是实现跨平台
  • 第二步是使其具有并超越当前.NET Framework的能力
  • 第三步是实现一统各平台开发和运行环境,包括各端(服务器,手持设备,IOT等等)

目前看第一步完成度很高,第二步完成了70%(按API数量实现).第三步也一直在做.我们能从微软的发展路线中看到一个美好的前景,即用.NET的语言给各种设备写一遍程序就足以应付产品需求,这是多方共赢的局面。我们也由衷的希望.NET
Core有一个更加美好的未来。


作者:帅虫哥 出处:

与其他 .NET 实现比较

将 .NET Core 与现有的 .NET
实现进行比较,这可能是了解其大小和形状最简单的方法。

与 .NET Framework 比较

.NET 由 Microsoft 于 2000 年首次发布,而后发展至今。 15 年多以来,.NET
Framework 一直是 Microsoft 出品的主要 .NET 实现。

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

  • 应用模型 — .NET Core 不支持所有
    .NET Framework 应用模型,某种程序上是因为其中许多模型都是基于
    Windows 技术,如 WPF(基于 DirectX 生成)。 但 .NET Core 和 .NET
    Framework 两者都支持控制台和 ASP.NET Core 应用模型。
  • API — .NET Core 包含很多与 .NET
    Framework 相同,但数量较少的
    API,并且具有不同的组成要素(程序集名称不同;关键用例中的类型形状不同)。
    目前,这些差异通常都需要更改,以将源移植到 .NET Core。 .NET Core
    实现 .NET 标准 API,随着时间的推移,将包含更多 .NET
    Framework BCL 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 的焦点是云工作负荷。