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

时间:2015-04-13 16:07:18

标签: .net .net-core

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

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

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

我如何知道何时使用合适的?

2 个答案:

答案 0 :(得分:70)

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

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

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

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

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

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

答案 1 :(得分: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 compilation,可以对代码using the C++ backend compiler(或使用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服务器和better performance配置文件,而不是之前的ASP.NET 4.x版本。这在整个框架和Core框架上都是跨平台兼容的。它不包括WebForms或SignalR支持(yet)。它不向后兼容ASP.NET 4,尽管如果你现在使用MVC / WebAPI,那么MVC / WebAPI前进应该相当接近,因为只有一个Controller类。如果您想要使用WebForms,那么您别无选择,只能坚持使用完整的4.6 Framework。

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