什么是#34; .NET Core"?

时间:2014-11-13 11:38:32

标签: .net .net-core

最近在官方.NET Framework Blog宣布.NET Core is going open source。具有讽刺意味的是,作者提到 .NET Core将在下一篇文章中解释。 another announce post中提到了更多细节。

从提供的图表中:

.NET Core diagram

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


我发现recent article我发现它既短又非常好。它涵盖了.NET Standard,.NET Core和.NET Framework及其关系。强烈推荐它。

12 个答案:

答案 0 :(得分:137)

来自.NET博客Announcing .NET 2015 Preview: A New Era for .NET

  

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

     

.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包含执行应用程序和库代码的运行时,以及nearly fully documented standard class library

运行时是Common Language Runtime,它实现Common Language Infrastructure,与The JIT compiler一起运行CIL (formerly MSIL) bytecode

根据其历史和目的,微软的.NET规范和实现非常以Windows和IIS为中心,并且“很胖”。有variations with fewer libraries, namespaces and types,但很少有用于网络或桌面开发,或troublesome to port from a legal standpoint

因此,为了提供可以在非Windows机器上运行的非Microsoft版.NET,必须开发一种替代方案。不仅必须为此移植运行时,而且整个框架类库也要被广泛采用。最重要的是,要完全独立于Microsoft,需要使用最常用语言的编译器。

Mono是少数(如果不是唯一的){!3}}的替代实现之一,它在Windows之外的各种操作系统上运行,  runtime以及almost all namespaces from the Framework Class Library as of .NET 4.5VB

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

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

答案 1 :(得分:75)

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

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


更新:在.NETCore 2.0发布之后,我看到了一些具有代表性的数字,可以提供一个体面的洞察力。在过去的两年里,他们一直在努力将框架apis移植到.NETCore。 .NETCore 1.0最初支持13,000个apis。 .NETCore 2.0增加了20,000 api,使总数增加到32,000,并允许大约70%的现有Nuget包被移植。有一组api过于强调Windows,很容易移植到Linux和MacOS。在最近发布的Windows兼容包中,它增加了另外20,000个apis。

答案 2 :(得分:43)

我发现recent article我发现它既短又非常好。它涵盖了.NET Standard,.NET Core和.NET Framework及其关系。强烈推荐它。不幸的是没有时间适应并把它放在这里。

以下原始答案内容:


所以,基于这个主题的最新official entry,我在这里看到了一些关键点:

  

.NET Core本质上是.NET Framework的一个分支   实施也围绕因素考虑进行了优化。

     

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

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

enter image description here

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

  

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

即。顶部的洋红色矩形将与新的App模型大量添加,但基础将保持常见。

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平台是一个针对open进行了优化的新.NET堆栈   NuGet上的源代码开发和敏捷交付。我们正在努力   Mono社区在Windows,Linux和Mac上都很棒   微软将在所有三个平台上支持它。

     

我们保留了.NET Framework带来的价值   企业级发展。我们将提供.NET Core发行版   表示我们一起测试和支持的一组NuGet包。   Visual Studio仍然是您开发的一站式商店。消费   作为发行版的一部分的NuGet包不需要   互联网连接。

基本上,这可以被认为是具有改变的分发模型的.NET 4.6,同时,它正处于成为开源的过程中。

答案 3 :(得分:19)

Current documentation很好地解释了什么是.NET Core,使用的区域等等。以下特征最能定义.NET Core:

  

灵活部署:可以包含在您的应用中或已安装   并排用户或机器范围。

     

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

     

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

     

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

     

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

     

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

以下是.NET Core包含的内容:

  

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

     

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

     

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

     

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

答案 4 :(得分:17)

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

请参阅docs.microsoft.com

答案 5 :(得分:15)

Microsoft认识到未来的Web开源范例,并决定将.NET打开到其他操作系统.NET核心是用于Mac和Linux的.NET Framework。它是一个“轻量级”.NET Framework,因此缺少某些功能/库。在Windows上,我仍然会运行.NET Framework / VS2015。 .NET Core对开源世界更友好,如nodejs,npm,yeoman,docker等。您可以使用Visual Studio Code + .NET core在Mac或Linux上开发成熟的网站和RESTful API,这是以前无法实现的。因此,如果您喜欢mac或Ubuntu,并且您是.NET开发人员,那么请继续进行设置。 对于Mono vs. .NET Core,Mono是作为Linux的.NET Framework开发的,现在由Microsoft(名为Xamarin的公司)收购并用于移动开发。最终,Microsoft可能会将Mono合并/迁移到.NET核心。我现在不担心Mono。

答案 6 :(得分:9)

今天尝试在VS2017中创建一个新项目(最近从2015年升级),并注意到项目类型的新选择。无论他们是新人,还是我开始一个新项目已经有一段时间了!! :)

enter image description here

遇到this docs link并发现它非常有用,所以分享。子弹的细节也在文章中提供。只需在这里发布项目符号:

  

在以下情况下,您应该将.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 doesn’t support .NET Core.

答案 7 :(得分:8)

来自Microsoft's Website

  

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

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

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

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

答案 8 :(得分:4)

.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进行依赖项注入。

答案 9 :(得分:1)

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

有关更多详细信息,请访问这篇出色的文章: https://www.c-sharpcorner.com/article/difference-between-net-framework-and-net-core/ 从一个月前开始

答案 10 :(得分:0)

.Net Core是.net框架的开放源代码和跨平台版本。Microsoft产品除了具有强大的功能之外,对于通常的用户,尤其是.net技术制成的产品的最终用户而言,它们总是昂贵的。大多数低级客户都喜欢使用linux作为操作系统,而.net core之前,尽管它们具有强大的功能,但他们不愿意使用Microsoft技术。但是,.net Core生产之后,此问题得到了彻底解决,我们可以满足客户的要求。无需考虑其操作系统等。

答案 11 :(得分:0)

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