微软.NET Core技术特性简述

微软.net core目前已更新至3.0版本,其技术风险已经比较低,今天对相关其技术特性做一个简单的介绍。

.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该项目提供支持。

语言

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

Visual Studio

Visual Studio Code

Sublime Text

Vim

这种集成部分由OmniSharp和Ionide项目的参与者提供。

API

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

基元类型,例如bool和int。

集合,例如System.Collections.Generic.List和System.Collections.Generic.Dictionary。

实用类型,例如System.Net.Http.HttpClient和System.IO.FileStream。

数据类型,例如 System.Data.DataSet和DbSet。

高性能类型,例如 System.Numerics.Vector和Pipelines。

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

框架

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

ASP.NET Core

Windows 10 通用 Windows 平台 (UWP)

Tizen

撰写

.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 运行时和框架。

开源

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

针对适应性而设计

经过构建,.NET Core 与其他 .NET 产品非常相似,但也存在独特性。 它旨在实现对新平台和工作负荷广泛的适应性,还提供了多个 OS 和 CPU 端口(且可能会移植到更多端口上)。

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

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

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

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是与平台无关的。

与其他 .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.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 比较

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 的焦点是云和桌面工作负载。

未来动向

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

生成可随处使用且提供统一运行时行为和开发人员体验的单一 .NET 运行时和框架。

通过充分利用 .NET Core、.NET Framework、Xamarin 和 Mono 来扩展 .NET 的功能。

根据单个基本代码构建开发人员(Microsoft 和社区)可处理且协同扩展,同时可改善所有方案的产品。

摘译自微软.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,753评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,668评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,090评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,010评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,054评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,806评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,484评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,380评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,873评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,021评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,158评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,838评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,499评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,044评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,159评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,449评论 3 374
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,136评论 2 356

推荐阅读更多精彩内容