什么是".NET Core"?

Pet*_*lin 303 .net .net-core

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

从提供的图表:

.NET核心图

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


我发现最近的文章我发现既短又非常好.它涵盖了.NET Standard,.NET Core和.NET Framework及其关系.强烈推荐它.

Cod*_*ter 143

来自.NET博客宣布.NET 2015预览:.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,它包含一个执行应用程序和库代码的运行时,以及一个几乎完全记录的 标准类库.

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

鉴于其历史和目的,微软的.NET规范和实现非常以Windows和IIS为中心并且"胖".存在较少的库,名称空间和类型的变体,但它们中很少用于Web或桌面开发,或者从法律角度来看是很麻烦的.

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

Mono运行时的唯一替代实现之一,它运行在除Windows之外的各种操作系统上, 几乎所有来自.NET 4.5的Framework类库以及VBC#编译器的命名空间.

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

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

  • 这些都是很新的东西,几乎没有描述,我想你问了一个很好的问题.:) (15认同)
  • 哦,这就是我错过的!它实际上低于博客的时间轴!真惭愧.. (4认同)
  • 第二个想法似乎不是"下一篇文章",因为描述仍然很简短. (3认同)
  • 自从他们开始通过nuget发布框架以来,我们一直在这样做.不需要该帖子中的变通方法. (3认同)
  • 这基本上不是vNext给我们带来的吗? (2认同)
  • @ ps2goat vNext [部分构建在Core CLR之上](http://blogs.msdn.com/b/cesardelatorre/archive/2014/05/12/the-future-of-net-in-the-server -asp-net-vnext-optimized-for-cloud-and-server-workloads.aspx):_"你将能够拥有在已建立的ASP.NET和System.Web上运行的某些子系统的业务应用程序.在新的ASP.NET vNext上运行的其他更新的子系统,[...] ASP.NET vNext将允许您逐个应用地部署自己的.NET Framework版本"_. (2认同)
  • 好吧,所以ASP.NET 5仍然需要在服务器上安装,而vNext将能够在每个应用程序的基础上运行bin目录中的DLL,而无需更新服务器上安装的.NET版本? (2认同)
  • @ ps2goat是的,它甚至可以在Mono上运行.您[也不一定需要在您的网络服务器上安装MVC](http://stackoverflow.com/questions/10441568/do-i-need-to-install-mvc-3-4-on-web-server-对运行MVC应用程序). (2认同)
  • 您可能想要编辑答案.ASP.NET 5已重命名为[ASP.NET Core 1.0](https://blogs.msdn.microsoft.com/webdev/2016/01/19/asp-net-5-is-dead-introducing-asp-净芯-1-0和净芯1-0 /). (2认同)

Han*_*ant 78

它是.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个api.

  • 我刚刚描述了.NETCore版本的历史.在阳光下没什么新东西,它已经存在了很长时间.5.0的变化是递增的,新的RyuJIT x64抖动是我现在唯一能想到的.只有许可证更改真的是新的:) (5认同)
  • 从博客文章中我不会说这看起来像另一个'紧凑'框架版本.宣布`.NET Core`是5.0版,高于最新的完整框架.我认为他们的意思是不同的东西. (4认同)
  • 我明白了你的意思.虽然我仍然认为宣布框架子集作为.NET的下一个时代有点大胆. (3认同)

Pet*_*lin 44

我发现最近的文章我发现既短又非常好.它涵盖了.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模型大量添加,但基础将保持常见.

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上表现出色,微软将在所有三个平台上支持它.

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

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


Set*_*Set 19

当前的文档很好地解释了什么是.NET Core,使用的区域等等.以下特性最好定义.NET Core:

灵活部署:可以包含在您的应用程序中,也可以安装在并行用户或机器范围内.

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

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

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

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

Microsoft支持:根据.NET Core Support,Microsoft支持.NET Core

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

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

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

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

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


far*_*ast 17

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

请参阅docs.microsoft.com


Man*_*ain 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.


joy*_*ym8 10

正在尝试在VS2017中创建一个新项目(最近从2015年升级),并注意到项目类型的新选择.他们是新的,或者自从我开始一个新项目以来已经有一段时间了!! :)

在此输入图像描述

来到这个文档链接,发现它非常有用,所以分享.子弹的细节也在文章中提供.只需在这里发布项目符号:

您应该在以下情况下将.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.
Run Code Online (Sandbox Code Playgroud)

您应该在以下情况下将.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.
Run Code Online (Sandbox Code Playgroud)


Sal*_*aal 9

来自微软的网站:

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

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

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

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

  • “ .NET Core指的是包括.NET Core在内的多种技术” ...很棒的东西 (3认同)

Wal*_*eed 5

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

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

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