什么是“.NET核心”?

最近在一个官方的.NET Framework博客中 ,宣布.NET Core将会开源 。 具有讽刺意味的是,作者提到.NET Core将在下一篇文章中解释。 在另一个通告中提到了一些更多的细节。

从提供的图表:

.NET核心图

和文章本身,我会假设.NET Core(除了明显的东西像是开源的)是一个模块化的重新实现完整的.NET。 即框架组件是根据需要加载的,就像现在加载NuGet包一样。 而现在ASP.NET 5是已经实现的模块之一。 我对.NET Core的理解是否正确? 也许我错过了什么?


我发现最近的文章 ,我发现既简短又非常好。 它涵盖了.NET标准,.NET核心和.NET框架及其关系。 强烈推荐它。

来自.NET博客Announcing .NET 2015 Preview:一个新的.NET时代 :

.NET Core有两个主要组件。 它包含一个与.NET Framework CLR相同的代码库构build的小型运行时。 .NET Core运行时包含相同的GC和JIT(RyuJIT),但不包含应用程序域或代码访问安全性等function。 运行时通过NuGet作为[ASP.NET Core]包的一部分提供。

.NET Core还包含基类库。 这些库与.NET Framework类库在很大程度上是相同的,但是已经被考虑到了(取消依赖关系),使我们能够发布一小部分库。 这些库在NuGet.org上以System。* NuGet包的forms发货。

和:

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

简而言之:首先是Microsoft .NET Framework ,它由执行应用程序和库代码的运行库以及几乎完全logging的 标准类库组成 。

运行时是Common Language Runtime ,它实现了Common Language Infrastructure ,与JIT编译器一起运行CIL(以前的MSIL)字节码 。

微软对.NET的规范和实现,考虑到它的历史和目的,非常以Windows和IIS为中心,而且“胖”。 这些变体的库,名称空间和types较less ,但是对于网页或桌面开发很less用到,或者从法律angular度来说很麻烦 。

因此,为了提供可以在非Windows机器上运行的非Microsoft版本的.NET,必须开发替代scheme。 不仅要运行该运行时,还要整个框架类库得到很好的采用。 最重要的是,为了完全独立于微软,需要一个最常用语言的编译器。

Mono是less数几个(如果不是运行时的唯一替代实现),它可以在Windows以外的各种操作系统上运行, 几乎所有.NET Framework 4.5以及VB和C#编译器 的Framework Class Library的命名空间都可以运行。

input.NET Core: 运行时的开源实现,以及最小的基类库。 所有额外的function都是通过NuGet包来实现的,这些特定的运行时,框架库和第三方包都与应用程序本身一起部署。

ASP.NET Core是MVC和WebAPI的新版本,与精简的HTTP服务器抽象(在.NET Core运行时上运行)捆绑在一起,但也在.NET Framework上运行。

它是.NET框架的一个子集,从Compact Framework版本开始。 进入Silverlight,Windows Store和Windows Phone。 专注于保持较小的部署,适合于快速下载和存储能力有限的设备。 而且更容易在非Windows平台上出现,肯定是它被选为开源版本的原因。 CLR和基类库的“困难”和“昂贵”部分被省略。

否则,当你定位这样一个框架版本时总是容易识别,很多好东西将会丢失。 您将使用一组独立的引用程序集,这些程序集只公开运行时支持的内容。 存储在C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore目录中的计算机上。

我发现最近的文章 ,我发现既简短又非常好。 它涵盖了.NET标准,.NET核心和.NET框架及其关系。 强烈推荐它。 不幸的是,没有时间去适应并把它放在这里。

下面是原答案内容:


因此,根据最新的官方报道 ,我在这里看到一些关键点:

.NET Core本质上是.NET Framework的一个分支,它的实现也是围绕代理问题进行优化的。

我们认为.NET Core不是.NET Native或ASP.NET 5特有的,BCL和运行时是通用的,并且是模块化的。 因此,它构成了所有未来的.NET垂直的基础。

因此,.NET Native和ASP.NET 5只是新框架configuration的一个testing“主体”,部分原因可能是因为它们完全不同:

在这里输入图像说明

看,他们甚至需要单独的低层次,但BCL的主要部分仍然是常见的:

我们认为.NET Core不是.NET Native或ASP.NET 5特有的,BCL和运行时是通用的,并且是模块化的。 因此,它构成了所有未来的.NET垂直的基础。

即顶部洋红色矩形将大量添加新的应用程序模型,但基地将保持常见。

Nuget部署:

与.NET Framework不同,.NET Core平台将作为一组NuGet包提供。 我们已经决定了NuGet,因为这是图书馆生态系统的主要部分。

与当前框架的关系:

对于Visual Studio 2015,我们的目标是确保.NET Core是.NET Framework的纯粹子集。 换句话说,不会有任何特征差距。 在Visual Studio 2015发布之后,我们的期望是.NET Core的版本比.NET Framework更快。 这意味着只有在基于.NET Core的平台上才有可用的function。

概要:

.NET Core平台是一个新的.NET堆栈,专门针对NuGet上的开源开发和敏捷交付进行了优化。 我们正在与Mono社区合作,在Windows,Linux和Mac上发挥出色,微软将在三个平台上支持它。

我们正在保留.NET Framework为企业级开发带来的价值。 我们将提供代表我们testing和支持的一组NuGet包的.NET Core分布。 Visual Studio仍然是您的一站式开发工具。 使用NuGet包作为发行版的一部分不需要互联网连接。

基本上这可以被认为是一个改变了分布模型的.NET 4.6,它同时正在成为一个开源的过程。

目前的文档有很好的解释什么是.NET核心,使用领域等等。 以下特性最好地定义了.NET Core:

灵活的部署 :可以包含在您的应用程序中,也可以并排安装在用户或机器上。

跨平台 :在Windows,MacOS和Linux上运行; 可以移植到其他操作系统。 受支持的操作系统(OS),CPU和应用程序scheme将随着时间的推移而增长,由微软,其他公司和个人提供。

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

兼容 :.NET Core通过.NET标准库与.NET Framework,Xamarin和Mono兼容。

开源 :.NET Core平台是开源的,使用MIT和Apache 2许可证。 文档根据CC-BY进行许可。 .NET Core是一个.NET Foundation项目。

Microsoft支持 :每个.NET Core Support都支持.NET Core

以下是.NET核心包含的内容:

一个.NET运行时,它提供了一个types系统,程序集加载,垃圾回收器,本地interop和其他基本服务。

一组框架库,提供原始数据types,应用程序组合types和基本工具。

一组SDK工具和语言编译器,支持.NET Core SDK中提供的基本开发人员体验。

“dotnet”应用程序主机,用于启动.NET Core应用程序。 它select运行时间并承载运行时间,提供程序集加载策略并启动应用程序。 同样的主机也用于以相同的方式启动SDK工具。

.NET Core是.NET标准(ECMA 335)的新型跨平台实现,类似于Mono,但由Microsoft自己完成。

请参阅docs.microsoft.com

微软认识到未来的networking开放源代码范例,并决定开放.NET到其他操作系统。NET核心是一个用于Mac和Linux的.NET框架。 这是一个“轻量级”的.NET框架,所以一些function/库丢失了。 在Windows上,我仍然会运行.NET Framework / VS2015。 .NET Core对于像nodejs,npm,yeoman,docker等开放源代码世界更友好。您可以使用Visual Studio Code + .NET核心在Mac或Linux上开发完整的Web站点和RESTful API,这在以前是不可能的。 所以如果你喜欢mac或者Ubuntu,并且你是一个.NET开发者,那么继续设置它。 对于Mono vs. .NET Core,Mono是作为Linux的.NET Framework开发的,现在被微软(Xamarin公司)收购,用于移动开发。 最终,微软可能会将Mono合并/迁移到.NET核心。 我现在不担心莫诺。

来自微软的网站 :

.NET Core是指包括.NET Core,ASP.NET Core和Entity Framework Core在内的多种技术。

这些技术与本地.NET不同,因为它们使用CoreCLR运行时(在通用Windows平台中使用)运行。

正如你在你的问题中提到的那样,.NET不仅是开源的,而且是可移植的[在MacOS,Windows和Linux上运行]

.NET的内部也进行了优化,除非应用程序需要,否则不要使用其内核库中的不同模块

正试图在VS2017中创build一个新项目(最近从2015年升级),并注意到项目types的新select。 要么他们是新的,或者从我开始一个新的项目已经有一段时间了! 🙂

在这里输入图像说明

遇到这个文档链接 ,发现它非常有用,所以分享。 文章中还提供了子弹的细节。 只需在这里张贴子弹:

在以下情况下,应该使用.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. 

在下列情况下,您应该为您的服务

 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 Core是由Microsoft和.NET社区在GitHub上维护的通用开发平台。 它是跨平台的,支持Windows,macOS和Linux,可用于设备,云端和embedded式/物联网场景。

有关更多详细信息: https : //docs.microsoft.com/en-us/aspnet/core/