什么是“ .NET Core”?


323

最近,在.NET Framework官方博客中,宣布.NET Core即将开源

具有讽刺意味的是,作者提到在下一篇文章中将解释什么是 .NET Core。其他公告中提到了更多详细信息。

从提供的图中:

.NET核心图

和文章本身,我认为.NET Core(除了诸如开源之类的显而易见的东西)是整个.NET的模块化重新实现。即,框架组件根据需要加载,就像现在加载NuGet包一样。现在,ASP.NET 5是已经实现的模块之一。我对.NET Core的理解正确吗?也许我缺少什么?


我发现最近的一篇文章很简短,而且很好。它涵盖.NET Standard,.NET Core和.NET Framework及其关系。我强烈推荐它。


5
这里有一个新的博客文章blogs.msdn.com/b/dotnet/archive/2014/12/04/…,但仍然很难理解该图。例如,这是否意味着WPF和WinForms无法使用.NET Core?
dodgy_coder 2014年

@dodgy_coder我认为他们最终将只是Store Apps和ASP.NET 5率先使用新的框架体系结构。
Petr Abdulin 2014年

1
@dodgy_coder,正确。到目前为止,WPF和WinForms应用程序无法移植到.net核心。它们可能会重新开发为Windows通用应用程序。看到这个:blogs.msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core
VivekDev 2016年

Answers:


154

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

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

.NET Core还包括基类库。这些库与.NET Framework类库在很大程度上是相同的代码,但是已被分解(除去了依赖项)以使我们能够发布较小的库集。这些库在NuGet.org上作为System。* NuGet软件包提供。

和:

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

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

运行时是公共语言运行时,它实现了公共语言基础结构,并与JIT编译器一起运行CIL(以前称为MSIL)字节码

鉴于其历史和目的,Microsoft的.NET规范和实现非常以Windows和IIS为中心,并且“很胖”。有一些变化,它们的库,名称空间和类型较少,但是它们很少用于Web或桌面开发,或者从法律的角度来看,移植麻烦

因此,为了提供可以在非Windows计算机上运行的非Microsoft版本的.NET,必须开发一种替代方法。为此,不仅需要移植运行时,而且还必须移植整个Framework类库。最重要的是,要完全独立于Microsoft,将需要用于最常用语言的编译器。

Mono运行时的少数几个实现之一,即使不是唯一的替代实现,它也可以在Windows之外的各种OS上运行,它 是.NET 4.5VBC#编译器中的Framework Class Library中几乎所有名称空间

输入.NET Core:运行时的开源实现和最小的基类库。所有其他功能都通过NuGet软件包提供,并与应用程序本身一起部署特定的运行时,框架库和第三方软件包。

ASP.NET Core是MVC和WebAPI的新版本,与瘦HTTP服务器抽象捆绑在一起,可在.NET Core运行时-以及.NET Framework上运行。


4
哦,这就是我想念的方式!它实际上在博客的时间轴下面!真可惜..
彼得·阿卜杜林

17
这些都是很新的东西,几乎没有描述,我想你问了一个好问题。:)
CodeCaster

3
第二个想法似乎不是“下一个帖子”,因为描述仍然很简短。
Petr Abdulin 2014年

2
这基本上不是vNext带给我们的吗?
ps2goat 2014年

3
自从他们开始通过nuget发布框架以来,我们一直在这样做。无需该帖子中的解决方法。
ps2goat 2014年

84

它是.NET Framework的子集,从Compact Framework版本开始。它发展到了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最初支持13,000个API。.NET Core 2.0添加了20,000个API,使总数达到32,000个,并允许移植约70%的现有NuGet软件包。有一些API与Windows的结合太深,以至于无法轻松移植到Linux和MacOS。在最近发布的Windows兼容包中,它增加了20,000个API。


4
在博客文章中,我不会说这看起来像另一个“紧凑”框架版本。宣布了.NET Core高于最新完整框架的版本5.0。我认为它们的意思是不同的。
Petr Abdulin 2014年

5
我刚刚描述了.NETCore版本的历史。阳光下没有新事物,已经存在了很长时间。5.0中的变化是增量的,新的RyuJIT x64抖动是我现在唯一想到的抖动。只有许可证更改才是真正的新内容:)
Hans Passant 2014年

3
我明白你的意思。尽管我仍然认为将框架子集宣布为.NET的下一个时代有点大胆。
Petr Abdulin 2014年

50

我发现最近的一篇文章很简短,而且很好。它涵盖.NET Standard,.NET Core和.NET Framework及其关系。我强烈推荐它。不幸的是,我没有时间去适应它并放在这里。

原始答案内容如下:


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

.NET Core本质上是.NET Framework的一个分支,其实现也围绕着因数优化而优化。

我们认为.NET Core并非特定于.NET Native或ASP.NET 5 – BCL和运行时是通用的,并且设计为模块化的。因此,它为将来的所有.NET垂直行业奠定了基础。

因此,.NET Native和ASP.NET 5只是新框架配置的测试“主题”,部分原因可能是因为它们完全不同:

在此处输入图片说明

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

我们认为.NET Core并非特定于.NET Native或ASP.NET 5 – BCL和运行时是通用的,并且设计为模块化的。因此,它为将来的所有.NET垂直行业奠定了基础。

即,顶部的洋红色矩形将随新的App Models大量添加,但基础将保持通用。

NuGet部署:

与.NET Framework相比,.NET Core平台将作为一组NuGet软件包提供。我们选择了NuGet,因为这是大多数图书馆生态系统所在的地方。

与当前框架的关系:

对于Visual Studio 2015,我们的目标是确保.NET Core是.NET Framework的纯子集。换句话说,不会有任何功能差距。在发布Visual Studio 2015之后,我们期望.NET Core的发布速度比.NET Framework快。这意味着在某些时间点上,功能仅在基于.NET Core的平台上可用。

摘要:

.NET Core平台是一个新的.NET堆栈,已针对NuGet上的开源开发和敏捷交付进行了优化。我们正在与Mono社区合作,以使其在Windows,Linux和Mac上实现出色的性能,并且Microsoft将在所有三个平台上对其进行支持。

我们保留.NET Framework为企业级开发带来的价值。我们将提供.NET Core发行版,这些发行版表示我们一起测试和支持的一组NuGet软件包。Visual Studio仍然是您的一站式开发商店。使用发行版中的NuGet软件包不需要Internet连接。

基本上,可以将其视为具有更改的分发模型的.NET 4.6,同时,该模型正在处于开源过程中。


22

当前文档对.NET Core是什么,使用区域等有很好的解释。以下特征最能定义.NET Core:

灵活的部署:可以包含在您的应用中,也可以在用户或计算机范围内并排安装。

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

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

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

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

Microsoft支持:每个.NET Core支持,Microsoft支持.NET Core

.NET Core包括以下内容:

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

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

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

“ dotnet”应用程序主机,用于启动.NET Core应用程序。它选择运行时并托管运行时,提供程序集加载策略并启动应用程序。相同的主机也以几乎相同的方式用于启动SDK工具。



18

Microsoft意识到了未来的Web开源范例,并决定将.NET开放到其他操作系统。.NET Core是Mac和Linux的.NET Framework。它是一个“轻量级” .NET Framework,因此缺少某些功能/库。

在Windows上,我仍将运行.NET Framework和Visual Studio2015。.NETCore与Node.js,npm,YeomanDocker等开源世界更加友好。

您可以使用Visual Studio Code + .NET Core在Mac或Linux上开发成熟的网站和RESTful API,而这是以前不可能的。因此,如果您喜欢Mac或Ubuntu,并且您是.NET开发人员,请继续进行设置。

对于Mono与.NET Core,Mono是作为Linux的.NET Framework开发的,现已被Microsoft(名为Xamarin的公司)收购并用于移动开发。最终,Microsoft可能将Mono合并/迁移到.NET Core。我现在不用担心Mono。


12

我今天尝试在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 Framework用于服务器应用程序:

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 doesnt support .NET Core.

该链接提供.NET术语表。


11

微软网站

.NET Core是指几种技术,包括.NET Core,ASP.NET Core和Entity Framework Core。

这些技术与本机.NET的不同之处在于它们使用CoreCLR运行时(在Universal Windows Platform中使用)运行。

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

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


4
“ .NET Core指的是包括.NET Core在内的多种技术” ...很棒的东西
Kieren Johnstone,

3

微软刚刚宣布了.NET Core v 3.0,它是.NET Core的经过改进的版本。

有关更多详细信息,请访问这篇精彩的文章: 2019年4月起的.NET Framework和.NET Core之间的区别


3
强烈反对仅链接的回答和主要基于意见的回答。请参阅meta.stackexchange.com/a/8259
嘟嘟声

知道了,我编辑了意见部分。谢谢您告诉我。
itsikha

1
以什么方式改进?您能否提供最重要的更改和补充的摘要?
Peter Mortensen

3

.NET Core是适用于Windows,Linux和macOS操作系统的免费,开放源代码,托管计算机软件框架。它是.NET Framework的开源,跨平台的继承者。

Windows,Linux和macOS支持.NET Core应用程序。简而言之,.NET Core与.NET框架相似,但是它是跨平台的,即,它允许.NET应用程序在Windows,Linux和MacOS上运行。.NET Framework应用程序只能在Windows系统上运行。因此,.NET Framework和.NET Core之间的基本区别是.NET Core是跨平台的,而.NET Framework仅在Windows上运行。

此外,.NET Core具有Microsoft内置的依赖项注入,您不必使用第三方软件/ DLL文件进行依赖项注入。


1
您能详细介绍一下依赖注入吗?在这种情况下,这实际上意味着什么?您是指特定的框架吗?你有一些参考/链接吗?
Peter Mortensen

1

.NET Core是.NET的开源和跨平台版本。Microsoft产品除了具有强大的功能之外,对于普通用户,尤其是.NET技术制成的产品的最终用户,总是很昂贵。

大多数低级客户都喜欢使用Linux作为他们的操作系统,而.NET Core之前,尽管他们功能强大,但他们不愿意使用Microsoft技术。但是,在.NET Core生产之后,此问题已得到完全解决,我们可以在不考虑他们的操作系统等情况下满足客户的需求。


尚未完全解决。在Linux上使用Windows FormsWPF应用程序将很困难。
Peter Mortensen

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.