.NET Framework 4.6,.Net Native和.Net Core之间的区别

use*_*687 62 .net .net-core

我在几乎所有未来的.NET框架讨论中都会看到以下内容:

  • .NET Framework 4.6(完整.Net框架)
  • .NET Native
  • .NET核心

所有这些之间有什么区别?

我怎么知道何时使用合适的?

use*_*687 71

通过各种链接和视频后,我发现了一个有趣的图片:

.NET Framework 4.6,.Net Native和.NET Core

从上面我们可以很容易地推断出以下内容:

  • .NET Framework 4.6是与.NET相关的所有内容的完整框架,但缺少针对多平台(Windows,Linux和Mac)和云部署进行优化的库和运行时
  • 另一方面,.NET Core是.NET Framework 4.6的一个子集,主要针对多平台和云部署进行了优化
  • .NET Native主要用于开发通用应用程序,这些应用程序将在本地运行在任何设备和平台上进行优化(但不适用于Web应用程序)

一个有趣的观点是ASP.NET:

  • 如果我们需要最大程度的向后兼容性(比如Web表单或aspx支持),我们需要使用.NET Framework 4.6
  • 如果我们开发MVC,Web API或Razor网页,那么我们可以在.NET Framework 4.6或.NET Core环境中部署这些Web应用程序


Tim*_* P. 49

TLDR:如果它是Core,它是功能的一个子集,因此它可以跨平台运行.你可以在Core上运行的任何东西都可以在适用于Windows的完整4.6框架上运行.

.NET Framework v4.6 - 只能在Windows上运行的完整框架.但是,因为这是完整的框架,这意味着您将获得WCF,WPF和所有功能.您可以将此视为您今天可能正在进行的常规.NET Windows开发.它确实包括ASP.NET WebForms,MVC,Core和SignalR.如果您今天使用的是.NET 4.5,那么这是您的下一个自然升级路径.

.NET Core - 一个子集框架,不包含完整4.6 Framework中的所有内容.但是,它旨在在Windows,Mac或Linux上运行跨平台.但确实会丢失一些功能,例如WCF,WPF.但是你仍然会拥有ASP.NET Core(没有WebForms),但还没有SignalR.SignalR支持旨在提供更高版本.这使用dotnet CLI(命令行界面)编译应用程序,或者如果您在Windows上,则可以使用Visual Studio.

.NET Native - .NET Core框架的本机编译.而不是在.exe的运行时进行正常的JIT编译,这将进行AOT编译,可以使用C++后端编译器(或使用LLILC的 LLVM)对代码进行更好的优化.).执行此操作时,您将瞄准特定平台,例如"Linux 64位".其优点是启动时间更短,内存需求可能更小,希望更好的运行时性能,并且只发出一个单独的二进制文件(您不需要在目标计算机上安装.NET Framework).然而,权衡是对其他平台的可移植性 - 您将拥有适用于Linux,MacOS,Windows,32位,64位等的单独二进制文件.这目前仅适用于Windows应用商店应用,但正在开展更多工作,因此它'我将使用普通的.NET应用程序,包括ASP.NET应用程序.目前还没有成为.NET Core 1.0版本的一部分.

ASP.NET Core - 在.NET Core或Full Framework上进行Web开发的新方法.它包括一个可自定义的HTTP管道,Kestrel Web服务器,以及比以前的ASP.NET 4.x版本更好的性能配置文件.这在整个框架和Core框架上都是跨平台兼容的.它不包括的WebForms,或SignalR支持().它不向后兼容ASP.NET 4,虽然如果你现在使用的是MVC/WebAPI,那么MVC/WebAPI前进应该相当接近,因为只有一个Controller类.如果您想使用WebForms,那么您别无选择,只能坚持使用完整的4.6 Framework.

实体框架核心 - ORM开发的新框架.一旦被称为EF7,它就是跨平台的ORM框架,既适用于完整的4.6堆栈,也适用于新的Core堆栈.它不向后兼容EF6.它只支持代码优先模型.将来可能有工具可帮助升级现有的EF6 .edmx文件,以生成代码优先EFCore实现的类.