最近在一个官方的。net框架博客中宣布。net Core将会开源。

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

从提供的图表:

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


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


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

.NET Core has two major components. It includes a small runtime that is built from the same codebase as the .NET Framework CLR. The .NET Core runtime includes the same GC and JIT (RyuJIT), but doesn’t include features like Application Domains or Code Access Security. The runtime is delivered via NuGet, as part of the [ASP.NET Core] package. .NET Core also includes the base class libraries. These libraries are largely the same code as the .NET Framework class libraries, but have been factored (removal of dependencies) to enable us to ship a smaller set of libraries. These libraries are shipped as System.* NuGet packages on NuGet.org.

And:

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

简而言之:首先是Microsoft . net Framework,它由执行应用程序和库代码的运行时和一个几乎完整文档化的标准类库组成。

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

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

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

Mono是运行时的少数几个(如果不是唯一的)替代实现之一,它可以在Windows以外的各种操作系统上运行, 几乎所有的命名空间都来自于。net 4.5的框架类库以及VB和c#编译器。

进入。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目录。


Update: after the .NET Core 2.0 release I've seen some representative numbers that gives a decent insight. They have been hard at work back-porting framework APIs to .NET Core over the past two years. .NET Core 1.0 originally supported 13,000 APIs. .NET Core 2.0 added 20,000 APIs, bringing the total to 32,000 and allowing about 70% of existing NuGet packages to be ported. There are a set of APIs that are too heavily wedded to Windows to be easy to port to Linux and MacOS. Covered by the recently released Windows Compatibility Pack, it adds another 20,000 APIs.


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

原文回答内容如下:


因此,根据有关这一主题的最新官方词条,以下是我认为的一些关键点:

.NET Core本质上是.NET Framework的一个分支 实现也围绕保理关注点进行了优化。 我们认为。net Core既不针对。net Native也不针对。net Core ASP。NET 5 - BCL和运行时是通用的和设计的 模块化。因此,它构成了未来所有。net的基础 垂直的线。

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

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

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

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

NuGet部署:

相对于。net框架,.NET核心平台将是 作为一组NuGet包交付。我们决定使用NuGet是因为 这就是大多数图书馆生态系统所处的位置。

与当前框架的关系:

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

简介:

The .NET Core platform is a new .NET stack that is optimized for open source development and agile delivery on NuGet. We’re working with the Mono community to make it great on Windows, Linux and Mac, and Microsoft will support it on all three platforms. We’re retaining the values that the .NET Framework brings to enterprise class development. We’ll offer .NET Core distributions that represent a set of NuGet packages that we tested and support together. Visual Studio remains your one- stop-shop for development. Consuming NuGet packages that are part of a distribution doesn’t require an Internet connection.

基本上,我们可以把它看作是一个。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, Yeoman, Docker等。

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

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


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

Flexible deployment: Can be included in your app or installed side-by-side user- or machine-wide. Cross-platform: Runs on Windows, macOS and Linux; can be ported to other OSes. The supported operating systems (OSes), CPUs and application scenarios will grow over time, provided by Microsoft, other companies, and individuals. Command-line tools: All product scenarios can be exercised at the command-line. Compatible: .NET Core is compatible with .NET Framework, Xamarin and Mono, via the .NET Standard Library. Open source: The .NET Core platform is open source, using MIT and Apache 2 licenses. Documentation is licensed under CC-BY. .NET Core is a .NET Foundation project. Supported by Microsoft: .NET Core is supported by Microsoft, per .NET Core Support

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

A .NET runtime, which provides a type system, assembly loading, a garbage collector, native interoperability and other basic services. A set of framework libraries, which provide primitive data types, application composition types and fundamental utilities. A set of SDK tools and language compilers that enable the base developer experience, available in the .NET Core SDK. The 'dotnet' application host, which is used to launch .NET Core applications. It selects the runtime and hosts the runtime, provides an assembly loading policy and launches the app. The same host is also used to launch SDK tools in much the same way.


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

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

You should use .NET Core for your server application when: 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. You should use .NET Framework for your server application when: 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的开源和跨平台版本。