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

65

我在几乎每一次讨论未来.NET框架时都会看到以下内容:

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

这些之间有什么区别?

我如何知道何时使用适当的框架?


2
这篇文章对你来说会很有趣:http://blogs.msdn.com/b/dotnet/archive/2014/12/04/introducing-net-core.aspx - Jeroen Vannevel
https://blogs.msdn.microsoft.com/dotnet/2014/12/04/introducing-net-core/ - Mark Schultheiss
2个回答

75

通过查看各种链接和视频,我发现了一张整体上很有趣的图片:

.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 主要用于开发通用应用程序,这些应用程序将在任何设备和平台上都能够本地优化运行(不适用于Web应用程序)。

一个有趣的点是ASP.NET:

  • 如果我们需要最大程度的向后兼容性(例如支持web forms或aspx),则需要选择.NET Framework 4.6。
  • 如果我们开发MVC、Web API或Razor Web页面,则可以将这些Web应用程序部署在.NET Framework 4.6或.NET Core环境中。

我打算使用MVC、Razor、Angular JS和SignalR开发我的网站,那么我可以使用.Net Core吗?还有一件事,我将使用Azure云托管。 - Chandrasekar Kesavan
@Chandru - 这似乎是一个新问题 :) - Mark Schultheiss
@Chandru - SignalR已经被列入了.Net Core团队的待办事项。不幸的是,在发表此评论时还没有实现。 - Lafi
仍然无法在nuget.org上找到官方的AspNetCore SignalR包,但您可以在github.com/aspnet/SignalR上关注开发进展。 - John Rood
1
重要提示 - 图片中展示的.Net Core 5最终成为了.Net Core 1.0 当它最终发布到市场时。撰写此评论时,当前版本的.Net Core是2.0 于几个月前发布 - RBT

53
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框架中的所有内容的子集框架。然而,它旨在在Windows、Mac或Linux上进行跨平台运行。您确实会失去一些功能,例如WCF、WPF。但您仍将拥有ASP.NET Core(没有WebForms),但尚未支持SignalR。 SignalR支持预计会在稍后的版本中推出。这使用dotnet CLI(命令行界面)来编译应用程序,或者如果您在Windows上,则可以使用Visual Studio。 .NET Native -- .NET Core框架的本地编译。与在运行时进行正常的JIT编译不同,这将进行一次AOT编译,可能会使用C++后端编译器(或使用LLILC的LLVM)对您的代码进行更好的优化。 当您这样做时,您将针对特定平台进行目标设置,例如“Linux 64位”。 其好处是启动时间更快,内存要求可能更小,希望运行时性能更好,并且仅发出一个单一的二进制文件(您无需在目标计算机上安装.NET Framework)。 然而,权衡是可移植性到其他平台 - 您将为Linux、MacOS、Windows、32位、64位等拥有单独的二进制文件。 这目前仅适用于Windows Store应用程序,但正在进行更多工作,以便它可以用于普通的.NET应用程序,包括ASP.NET应用程序。 目前不打算成为.NET Core 1.0版本的一部分。
ASP.NET Core——在.NET Core或完整框架上进行Web开发的新方式。它包括可自定义的HTTP管道、Kestrel web服务器和比以前的ASP.NET 4.x版本性能更好的配置文件。跨平台兼容于完整框架和Core框架。它不包括WebForms或SignalR支持(尚未)。它与ASP.NET 4不向后兼容,但如果您现在正在使用MVC/WebAPI,则MVC/WebAPI将来会非常接近,因为只会有一个Controller类。如果您想使用WebForms,则只能使用完整的4.6 Framework。
Entity Framework Core是新的ORM开发框架。它曾被称为EF7,是跨平台ORM框架,适用于完整的4.6堆栈和新的Core堆栈。它不支持向后兼容EF6,仅支持基于代码的模型。未来可能会有工具升级现有的EF6 .edmx文件以生成用于基于代码的EFCore实现的类。

对于 .NET Core,我们正在使用 SignalR 版本 0.2.0-preview2-22683。 - crh225

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接