.NET Framework 4.6、.Net Native 和 .Net Core 之间的区别
Difference between .NET Framework 4.6, .Net Native and .Net Core
我几乎在未来的所有 .NET Framework 讨论中都会看到以下内容:
- .NET Framework 4.6(完整的 .Net 框架)
- .NET 本机
- .NET 核心
所有这些有什么区别?
我怎么知道什么时候使用合适的?
通过各种链接和视频,我发现了一个整体有趣的图片:
根据以上,我们可以很容易地推导出以下几点:
- .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 应用程序
TLDR:如果它是核心,它是功能的一个子集,因此它可以 运行 跨平台。在 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 框架的原生编译。这不是在 运行 执行 .exe 时执行正常的 JIT 编译,而是执行 AOT compilation that can potentially do some better optimizations of your code using the C++ backend compiler (or LLVM using LLILC)。当您执行此操作时,您将针对特定平台,例如 "Linux 64-bit"。好处是更快的启动时间、可能更小的内存需求、更好的 运行 时间性能,并且只发出一个二进制文件(您不需要在目标机器上安装 .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 profiles than the previous ASP.NET 4.x version. This is cross-platform compatible across both the full framework and the Core framework. It does not include WebForms, or SignalR support (yet)。它不向后兼容 ASP.NET 4,但如果您现在使用 MVC/WebAPI,那么 MVC/WebAPI 应该相当接近,因为只有一个 Controller
class。如果您想使用 WebForms,那么您别无选择,只能坚持使用完整的 4.6 框架。
Entity Framework Core -- ORM 开发的新框架。曾经称为 EF7,它是跨平台的 ORM 框架,适用于完整的 4.6 堆栈和新的核心堆栈。它不向后兼容 EF6。它仅支持代码优先模型。将来可能会有工具来帮助升级现有的 EF6 .edmx 文件以生成 classes 用于代码优先 EFCore 实现。
我几乎在未来的所有 .NET Framework 讨论中都会看到以下内容:
- .NET Framework 4.6(完整的 .Net 框架)
- .NET 本机
- .NET 核心
所有这些有什么区别?
我怎么知道什么时候使用合适的?
通过各种链接和视频,我发现了一个整体有趣的图片:
根据以上,我们可以很容易地推导出以下几点:
- .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 应用程序
TLDR:如果它是核心,它是功能的一个子集,因此它可以 运行 跨平台。在 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 框架的原生编译。这不是在 运行 执行 .exe 时执行正常的 JIT 编译,而是执行 AOT compilation that can potentially do some better optimizations of your code using the C++ backend compiler (or LLVM using LLILC)。当您执行此操作时,您将针对特定平台,例如 "Linux 64-bit"。好处是更快的启动时间、可能更小的内存需求、更好的 运行 时间性能,并且只发出一个二进制文件(您不需要在目标机器上安装 .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 profiles than the previous ASP.NET 4.x version. This is cross-platform compatible across both the full framework and the Core framework. It does not include WebForms, or SignalR support (yet)。它不向后兼容 ASP.NET 4,但如果您现在使用 MVC/WebAPI,那么 MVC/WebAPI 应该相当接近,因为只有一个 Controller
class。如果您想使用 WebForms,那么您别无选择,只能坚持使用完整的 4.6 框架。
Entity Framework Core -- ORM 开发的新框架。曾经称为 EF7,它是跨平台的 ORM 框架,适用于完整的 4.6 堆栈和新的核心堆栈。它不向后兼容 EF6。它仅支持代码优先模型。将来可能会有工具来帮助升级现有的 EF6 .edmx 文件以生成 classes 用于代码优先 EFCore 实现。