最近在一个官方.NET Framework Blog它被宣布.NET Core is going open source . 具有讽刺意味的是,作者提到将在下一篇文章中解释 .NET Core
. another announce post中提到了更多细节 .
从提供的图表:
和文章文本本身,我认为.NET Core(除了明显的东西,如开源)是完整的.NET的模块化重新实现 . 即框架组件在必要时加载,就像现在加载NuGet包一样 . 现在,ASP.NET 5是已经实现的模块之一 . 我对.NET Core的理解是否正确?也许我错过了什么?
我找到recent article,我发现它既短又非常好 . 它涵盖了.NET Standard,.NET Core和.NET Framework及其关系 . 强烈推荐它 .
10 回答
.NET Core是.NET标准(ECMA 335)的新跨平台实现,类似于Mono,但由Microsoft自己完成 .
见docs.microsoft.com
它是.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个api . .NETCore 2.0增加了20,000 api,使总数达到32,000,并允许大约70%的现有Nuget包被移植 . 有一组api过于强调Windows,很容易移植到Linux和MacOS . 最近发布的Windows兼容包涵盖了另外20,000个api .
Microsoft认识到未来的Web开源范例,并决定将.NET打开到其他操作系统.NET核心是用于Mac和Linux的.NET Framework . 它是一个“轻量级”.NET Framework,因此缺少某些功能/库 . 在Windows上,我仍然会运行.NET Framework / VS2015 . .NET Core对开源世界如nodejs,npm,yeoman,docker等更友好 . 您可以使用Visual Studio Code .NET核心在Mac或Linux上开发成熟的网站和RESTful API,这是以前无法实现的 . 因此,如果您喜欢mac或Ubuntu,并且您是.NET开发人员,那么请继续进行设置 . 对于Mono vs. .NET Core,Mono是作为Linux的.NET Framework开发的,现在由Microsoft(名为Xamarin的公司)收购并用于移动开发 . 最终,Microsoft可能会将Mono合并/迁移到.NET核心 . 我现在不担心Mono .
正在尝试在VS2017中创建一个新项目(最近从2015年升级),并注意到项目类型的新选择 . 要么他们是新的,要么自从我开始一个新项目已经有一段时间了! :)
来到this docs link,发现它非常有用,所以分享 . 子弹的细节也在文章中提供 . 只需在这里发布项目符号:
我找到recent article,我发现它既短又非常好 . 它涵盖了.NET Standard,.NET Core和.NET Framework及其关系 . 强烈推荐它 . 不幸的是没有时间适应并把它放在这里 .
原始答案内容如下:
所以,基于这个主题的最新official entry,这里有一些关键点,我看到它们:
所以.NET Native和ASP.NET 5只是新框架配置的测试“主题”,部分可能就是这样因为它们完全不同:
看,他们甚至需要单独的低级别,但BCL的主要部分仍然很常见:
即顶部的洋红色矩形将与新的App模型大量添加,但基础将保持常见 .
Nuget部署:
与当前框架的关系:
摘要:
基本上,这可以被认为是具有改变的分发模型的.NET 4.6,同时,它正处于成为开源的过程中 .
当前的documentation很好地解释了什么是.NET Core,使用的区域等等 . 以下特性最好定义.NET Core:
以下是.NET Core包含的内容:
.NET Core是由GitHub上的Microsoft和.NET社区维护的通用开发平台 . 它是跨平台的,支持Windows,macOS和Linux,可用于设备, Cloud 和嵌入式/物联网场景 .
了解更多详情:https://docs.microsoft.com/en-us/aspnet/core/
来自.NET博客Announcing .NET 2015 Preview: A New Era for .NET:
和:
简而言之:首先,有一个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为中心,并且"fat" . 有variations with fewer libraries, namespaces and types,但很少有用于Web或桌面开发或troublesome to port from a legal standpoint .
因此,为了提供可以在非Windows机器上运行的非Microsoft版本的.NET,必须开发一种替代方案 . 不仅要为此移植运行时,而且要使整个Framework类库得到很好的采用 . 最重要的是,要完全独立于Microsoft,需要使用最常用语言的编译器 .
Mono是少数几个,如果不是唯一的替代实现的runtime,它运行在Windows以外的各种操作系统上,almost all namespaces from the Framework Class Library as of .NET 4.5和VB和C# compiler .
输入.NET Core:runtime的开源实现,以及最小的基类库 . 所有其他功能都通过NuGet包提供,使用应用程序本身部署特定的运行时,框架库和第三方包 .
ASP.NET Core是MVC和WebAPI的新版本,它与瘦HTTP服务器抽象捆绑在一起,可以在.NET Core运行时运行 - 但也可以在.NET Framework上运行 .
来自Microsoft's Website:
这些技术与本机.NET的不同之处在于它们使用CoreCLR运行时(在通用Windows平台中使用)运行 .
正如您在问题中提到的,.NET Core不仅是开源的,而且是可移植的[在MacOS,Windows和Linux上运行]
除非应用程序需要,否则.NET Core的内部结构也经过优化,不会使用其核心库中的不同模块
.NET Core是由Microsoft和.NET社区在GitHub上维护的通用开发平台 . 它是跨平台的,支持Windows,macOS和Linux,可用于设备, Cloud 和嵌入式/物联网场景 .
See the full community documentation