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

几乎在每一个.NET框架讨论中我都会看到以下内容:

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

所有这些有什么区别?

我怎么知道什么时候使用适当的?

通过各种链接和video,我发现一个有趣的图片作为一个整体:

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

从上面,我们可以很容易推断出以下几点:

  • .NET Framework 4.6是与.NET相关的所有东西的完整框架,但缺less针对多平台(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应用程序

TLDR :如果是Core,它是function的一个子集,所以可以跨平台运行。 在Core上运行的任何东西都可以在Windows的完整4.6框架上运行。

.NET Framework v4.6 – 只能在Windows上运行的完整框架。 但是,因为这是完整的框架,这意味着您获得WCF,WPF和所有function。 你可以把它想象成你今天正在做的正常的.NET Windows开发。 它包括ASP.NET WebForms,MVC,Core和SignalR。 如果您今天使用.NET 4.5,这是您的下一个自然升级path。

.NET核心 – 一个子框架,不包括完整的4.6框架中的所有内容。 但是,它的目的是在Windows,Mac或Linux上运行跨平台。 但是,您确实会失去一些function,例如WCF,WPF。 但是你仍然会有ASP.NET Core(没有WebForms),但是还没有SignalR。 SignalR支持打算在后来的版本。 这使用dotnet CLI(命令行界面)编译应用程序,或者如果您在Windows上,则可以使用Visual Studio。

.NET Native – .NET Core框架的本地编译。 而不是在你的.exe的运行时进行正常的JIT编译,而是使用C ++后端编译器 (或使用LLILC的 LLVM)进行AOT编译 ,以便对代码进行更好的优化。 当你这样做时,你的目标是一个特定的平台,比如“Linux 64位”。 好处是启动时间更短,潜在的内存需求更小,希望运行时性能更好,并且只发布一个二进制文件(不需要在目标机器上安装.NET Framework)。 然而,权衡是可移植到其他平台 – 你将有Linux,MacOS,Windows,32位,64位等单独的二进制文件。目前这只适用于Windowsapp store的应用程序,但更多的工作正在完成,将在普通的.NET应用程序上工作,包括ASP.NET应用程序。 目前不会被定位为.NET Core 1.0版本的一部分。

ASP.NET Core – 在.NET Core或Full Framework上进行Web开发的新方法。 它包含一个可定制的HTTPpipe道,Kestrel Web服务器,以及比以前的ASP.NET 4.x版本更好的性能configuration文件。 跨整个框架和Core框架跨平台兼容。 它不包括WebForms或SignalR支持( 还 )。 它不是向后兼容ASP.NET 4,但是如果你现在使用MVC / WebAPI,那么MVC / WebAPI将会相当接近,因为只有一个Controller类。 如果你想使用WebForms,那么你别无select,只能坚持完整的4.6框架。

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