什么是 “.NET Core” ?

最近在一个官方的.NET框架博客中宣布,.NET Core 正在走向开源

具有讽刺意味的是,作者提到什么 . net Core将在下一篇文章中解释。更多细节在另一则公告中提到。

从提供的图表:

。NET核心图

和文章文本本身,我认为。net Core(除了像开源这样明显的东西)是完整的。net的模块化重新实现。也就是说,框架组件是根据需要加载的,就像现在加载NuGet包一样。现在是ASP。NET 5是其中一个已经实现的模块。我对。net Core的理解正确吗?也许我遗漏了什么?


我发现最近的一篇文章,我发现既短又好。它涵盖了。net标准、。net核心和。net框架以及它们之间的关系。我强烈推荐它。

132476 次浏览

来自。net博客宣布。net 2015预览:.NET的新时代:

. net Core有两个主要组件。它包含一个小型运行时,该运行时由与. net Framework CLR相同的代码库构建。. net Core运行时包括相同的GC和JIT (RyuJIT),但不包括应用程序域或代码访问安全等特性。运行时是通过NuGet交付的,作为[ASP。NET Core]包。

. net Core还包括基类库。这些库在很大程度上与. net Framework类库的代码相同,但已经进行了分解(删除依赖项),以使我们能够发布更小的库集。这些库作为系统提供。* NuGet.org上的NuGet包。

和:

[ASP。NET Core]是第一个采用。NET Core的工作负载。[ASP。NET Core]运行在。NET Framework和。NET Core上。关键值[ASP. ASP.]NET Core]的优点是它可以在[的多个版本上运行。NET Core]在同一台机器上。网站A和网站B可以在同一台机器上的两个不同版本的。net Core上运行,或者它们可以使用相同的版本。

简而言之:首先,有微软。net框架,它由执行应用程序和库代码的运行时和几乎完全记录在案 标准类库组成。

运行时是公共语言运行时,它实现了公共语言基础设施,与JIT编译器一起运行CIL(以前的MSIL)字节码

微软的。net规范和实现,考虑到它的历史和目的,非常以Windows和iis为中心,而且“胖”。有具有更少的库、名称空间和类型的变体,但很少对web或桌面开发有用,或者是从法律角度来看,移植很麻烦

因此,为了提供一个可以在非windows机器上运行的非微软版本的。net,必须开发一种替代方案。不仅运行时需要移植,整个框架类库也需要移植。最重要的是,要完全独立于微软,就需要一个最常用语言的编译器。

莫诺运行时的少数(如果不是唯一的话)可选实现之一,它可以在Windows以外的各种操作系统上运行, 从。net 4.5开始,几乎所有的命名空间都来自框架类库和a VBc#编译器.

进入。net Core: 运行时的开源实现,以及一个最小的基类库。所有附加的功能都是通过NuGet包交付的,与应用程序本身一起部署特定的运行时、框架库和第三方包。

ASP。NET Core是MVC和WebAPI的新版本,与一个瘦HTTP服务器抽象捆绑在一起,运行在。NET Core运行时上——但也运行在。NET框架上。

它是. net框架的一个子集,从紧凑框架版本开始。它发展到Silverlight、Windows Store和Windows Phone。它专注于保持部署规模小,适合快速下载和存储能力有限的设备。而且它更容易在非windows平台上运行,当然这也是它被选为开源版本的原因。CLR和基类库中“困难”和“昂贵”的部分被省略了。

否则,当您的目标是这样的框架版本时,总是很容易识别,因为将会缺少许多好东西。您将使用一组不同的引用程序集,这些程序集只公开运行时支持的内容。它存储在你机器上的C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore目录中。


更新:在。net Core 2.0发布之后,我看到了一些有代表性的数字,它们给出了一个不错的见解。在过去的两年中,他们一直在努力将框架api移植到。net Core, . net Core 1.0最初支持13000个api, . net Core 2.0增加了20000个api,使总数达到32000个,并允许大约70%的现有NuGet包被移植。有一组api过于依赖Windows,很难移植到Linux和MacOS上。在最近发布的Windows兼容包的覆盖下,它又增加了2万个api。

我发现最近的一篇文章,我发现既短又好。它涵盖了。net标准、。net核心和。net框架以及它们之间的关系。我强烈推荐它。不幸的是,我没有时间去适应并把它放在这里。

原文回答内容如下:


因此,基于该主题的最新官方的条目,以下是我所看到的一些关键点:

< p >。NET Core本质上是。NET Framework的一个分支

我们认为。net Core既不针对。net Native也不针对。net Core ASP。NET 5 - BCL和运行时是通用的和设计的 模块化。因此,它构成了未来所有。net的基础 垂直. < / p >

所以。net Native和ASP。NET 5只是一个测试“科目”。对于新的框架配置,部分原因可能是它们非常不同:

Enter image description here

看,它们甚至需要单独的底层,但BCL的一个主要部分仍然是常见的:

我们认为。net Core既不针对。net Native也不针对。net Core ASP。NET 5 - BCL和运行时是通用的和设计的 模块化。因此,它构成了未来所有。net的基础 垂直. < / p >

例如,顶部的洋红色矩形将大量添加新的应用程序模型,但基础将保持通用。

NuGet部署:

相对于。net框架,.NET核心平台将是 作为一组NuGet包交付。我们决定使用NuGet是因为 这是大多数库生态系统已经存在的地方

与当前框架的关系:

对于Visual Studio 2015,我们的目标是确保.NET Core是一个 纯。net框架的子集。换句话说,不会有 任何特征缺口。在Visual Studio 2015发布之后 . net Core的版本比. net Framework更快。这 意味着在某个时间点,某个特性只会出现 在基于。net Core的平台上可用

简介:

.NET Core平台是一个新的。net堆栈,它是为开放而优化的 NuGet上的源代码开发和敏捷交付。我们正在和 Mono社区让它在Windows, Linux和Mac上都很棒 微软将在所有三个平台上支持它 我们保留了。net框架带来的值 企业级发展。我们将提供。net Core发行版 表示我们一起测试和支持的一组NuGet包。 Visual Studio仍然是您的一站式开发商店。消费 作为发行版一部分的NuGet包不需要 互联网连接。< / p >

基本上,我们可以把它看作是一个。net 4.6版本,但它的发布模型有所改变,同时,它也正处于开源的过程中。

微软的网站:

. net Core指的是包括。net Core、ASP。NET核心和实体框架核心。

这些技术不同于原生的。net,因为它们使用CoreCLR运行时(在通用Windows平台中使用)运行。

正如你在问题中提到的,.NET Core不仅是开源的,而且是可移植的(在MacOS、Windows和Linux上运行)。

. net Core的内部结构也经过优化,除非应用程序需要,否则不会使用与其核心库不同的模块。

. net Core是一个新的。net标准(ECMA 335)的跨平台实现,类似于Mono,但由微软自己完成。

看到learn.microsoft.com

微软认识到未来的网络开源模式,并决定向其他操作系统开放。net Core是Mac和Linux的。net框架。它是一个“轻量级的”. net框架,因此缺少一些特性/库。

在Windows上,我仍然会运行。net Framework和Visual Studio 2015. net Core对诸如node . js、npm、自由民码头工人等开源世界更加友好。

你可以用Visual Studio Code + . net Core在Mac或Linux上开发成熟的网站和RESTful api,这在以前是不可能的。所以,如果你喜欢Mac或Ubuntu,并且你是一个。net开发者,那么就去设置它吧。

对于莫诺和。net Core, Mono是作为Linux的。net框架开发的,现在被微软(名为Xamarin的的公司)收购,并用于移动开发。最终,微软可能会合并/迁移Mono到。net Core。我现在不会担心Mono。

当前的文档很好地解释了。net Core是什么,要使用的区域等等。.NET Core有以下特点:

灵活的部署:可以包含在你的应用中或安装

.在用户或机器范围内

跨平台的:运行在Windows上, macOS和Linux;可以移植到其他操作系统。支持的操作系统、cpu和应用场景将随着时间的推移而增长,

命令行工具:所有产品场景都可以在命令行中执行。

兼容的: .NET Core兼容。net Framework, Xamarin和。net Framework

. Mono,通过. net标准库

开源: .NET核心 平台是开源的,使用MIT和Apache 2许可证。 . net Core是一个。net基金会 项目。< / p > .NET Core是微软支持的。 每。net核心支持

下面是。net Core包含的内容:

. net运行时,它提供类型系统、程序集加载、垃圾收集器、本机互操作性和其他基本服务。

一组框架库,提供基本数据类型、应用程序组合类型和基本实用程序。

一组SDK工具和语言编译器,支持基本的开发人员体验,可在. net Core SDK中获得。

“。net”应用程序主机,用于启动。net核心应用程序。它选择运行时并托管运行时,提供程序集加载策略并启动应用程序。同样的主机也用于以大致相同的方式启动SDK工具。

我今天试图在Visual Studio 2017中创建一个新项目(最近从Visual Studio 2015升级),并注意到项目类型的一组新的选择。它们要么是新的,要么是我已经有一段时间没有开始一个新项目了!!:)

Visual Studio截图

我偶然发现本文档链接,发现它非常有用,所以我分享。文章中还提供了子弹的详细信息。我只是在这里列出一些要点:

当你的服务器应用程序出现以下情况时,你应该使用。net Core:

You have cross-platform needs.
You are targeting microservices.
You are using Docker containers.
You need high performance and scalable systems.
You need side by side of .NET versions by application.

当你的服务器应用程序出现以下情况时,你应该使用.NET框架:

Your application currently uses .NET Framework (recommendation is to extend instead of migrating)
You need to use third-party .NET libraries or NuGet packages not available for .NET Core.
You need to use .NET technologies that are not available for .NET Core.
You need to use a platform that doesn’t support .NET Core.

这个链接提供了一个。net术语表。

<强>编辑10/7/2020 查看net 5.0 - "…只要一个。net向前发展,你就可以用它来瞄准Windows, Linux, macOS, iOS, Android, tvOS, watchOS和WebAssembly等等。 预计将于2020年11月发布

. net Core是。net的开源和跨平台版本。微软的产品,除了拥有强大的功能外,对于普通用户来说总是很昂贵,尤其是使用。net技术开发的产品的终端用户。

大多数底层客户更喜欢使用Linux作为他们的操作系统,而在。net Core之前,他们不喜欢使用微软的技术,尽管这些技术功能强大。但是在。net Core生产之后,这个问题就完全解决了,我们可以满足我们的客户,而不需要考虑他们的操作系统等等。

. net Core是一个免费的、开源的、受管理的计算机软件框架,适用于Windows、Linux和macOS操作系统。它是一个开源的,跨平台的。net框架的继承者。

. net Core应用程序支持Windows、Linux和macOS。简而言之。net Core类似于。net框架,但它是跨平台的,也就是说,它允许。net应用程序在Windows、Linux和MacOS上运行,而. net框架应用程序只能在Windows系统上运行。因此。net框架和。net核心的基本区别在于。net核心是跨平台的,而。net框架只能在Windows上运行。

此外,. net Core有微软内置的依赖注入,你不必使用第三方软件/DLL文件进行依赖注入。

. net Core是. net Framework的开源和跨平台版本。