第2章 .NET Core
2.1 .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支持。
1.语言
可以使用C#、Visual Basic和F#语言编写适用于.NET Core的应用程序和库。这些语言已集成或可以集成到文本编辑器和IDE中,如Visual Studio、Visual Studio Code、Sublime Text和Vi m。
2.API
.NET Core公开了多种方案的API,常见的有以下几种:
●基元类型,例如bool和int。
●集合,例如System.Collections.Generic.List<T>和System.Collections.Generic.Dictionary<TKey,TValue>。
●实用程序类型,例如System.Net.Http.HttpClient和System.IO.FileStream。
●数据类型,例如System.Data.DataSet和DbSet。
●高性能类型,例如System.Numerics.Vector和Pipelines。
.NET Core通过实现.NET Standard规范提供对.NET Framework和Mono API的兼容性。
3.框架
在.NET Core之上建立了多个框架:
●ASP.NET Core.
●Windows 10通用的Windows平台(UWP)。
●Tizen.
4.结构
.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运行时和框架。
5.开源
.NET Core是开源的(MIT许可证),由Microsoft于2014年提供给.NET Foundation。目前它是最活跃的.NET Foundation项目之一,可由个人和企业自由采用,包括用于个人、学术或商业目的。许多公司已使用.NET Core作为应用、工具、新平台和托管服务的一部分。其中某些公司对GitHub上的.NET Core做出了巨大贡献,并已成为.NET Foundation Technical Steering Group(.NET Foundation技术控制组)的成员,指导产品方向。
6.针对适应性而设计
与其他.NET产品相比,生成的.NET Core与它们十分类似,但具有唯一性,其目的是能够广泛适应新的平台和工作负载。它提供多个OS和CPU端口,并可以移植到更多端口。
该产品分为几个部件,各个部件能够在不同的时间适应新的平台。必须将运行时和特定于平台的基础库作为一个单元进行移植。与平台无关的库应在所有平台上按照构建的原样运行。对于通过减少特定于平台的实现以提高开发人员效率方面,项目存在偏差,但每当可以以此方式全部或部分实现算法或API时,都应首选与平台无关的C#代码。
人们经常会问,为支持多个操作系统应如何实现.NET Core?他们还会问是否存在单独的实现,或是否使用conditional compilation(条件编译)。这两者都在用,但强烈偏向条件编译。
大多数CoreFX代码都是与平台无关的代码,这些代码可在所有平台共享,如图2-1所示。不限平台的代码可实现为在所有平台上使用的单个可移植程序集。
图2-1
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是与平台无关的。