【问题标题】:What's the difference between .NET Core, .NET Framework, and Xamarin?.NET Core、.NET Framework 和 Xamarin 之间有什么区别?
【发布时间】:2016-10-30 01:12:57
【问题描述】:

Microsoft 现在在其家族中拥有 .NET Core、.NET Framework 和 Xamarin (Mono)。

这里似乎有很多重叠。这些类型的 .NET 平台之间有什么区别?我应该何时选择在我的项目中使用 .NET Core,而不是 .NET Framework 或 Xamarin?

【问题讨论】:

  • 缺少的标签是microsoft,但它不存在。这个问题假设微软。今天,您还必须在以下两者之间进行选择:对于桌面 gui 应用程序:例如爪哇。对于移动端:原生 android/objective-C,或许多其他跨平台框架之一。对于网络:例如烧瓶。正如提到.Net5的答案所示,微软正在拼命尝试在MS-Windows以外的其他平台上站稳脚跟,感受到了开源Mono的竞争,但还没有找到稳定的解决方案。

标签: .net xamarin .net-core


【解决方案1】:

这是微软的解释:

.NET Framework 是随 Windows 一起分发的“完整”或“传统”风格的 .NET。在构建桌面 Windows 或 UWP 应用程序,或使用较旧的 ASP.NET 4.6+ 时使用它。

.NET Core 是在 Windows、Mac 和 Linux 上运行的跨平台 .NET。当您想要构建可以在任何平台(包括 Docker 容器内部)上运行的控制台或 Web 应用程序时,请使用此选项。目前不包括 UWP/桌面应用。

Xamarin 用于构建可在 iOS、Android 或 Windows Phone 设备上运行的移动应用。

Xamarin 通常运行在 Mono 之上,后者是 .NET 的一个版本,在微软决定正式跨平台使用 .NET Core 之前,它是为跨平台支持而构建的。与 Xamarin 一样,Unity 平台也在 Mono 之上运行。


一个常见的混淆点是 ASP.NET Core 适合的地方。ASP.NET Core 可以在 .NET Framework (Windows) 或 .NET Core(跨平台)之上运行,如以下答案所述:@ 987654322@

【讨论】:

  • 每当有人说 .NET Core 是跨平台的,新开发人员就会感到困惑。 '.NET Core' 仅支持 UWP + ASP.NET Core & ASP.NET Core 是跨平台的,UWP 不是。跨度>
  • @HassanTareq 这不太正确。 .NET Core 是指可以在 Windows、Mac 或 Linux 上运行的运行时和库。 ASP.NET Core 是跨平台的,因为 .NET Core 是跨平台的。
  • 那么如果您提到虽然.Net core(运行时和库)是跨平台的,但我们不能在Mac / Linux。 UWP 不是跨平台的,我希望 UWP 是 WPF 的跨平台替代品(Xamarin.Forms 是)
  • @HassanTareq 好建议,我已经编辑了我的答案。
  • Xamarin Forms 现在几乎可以在一个代码库的所有内容上运行。 Windows UWP 桌面、WPF 桌面、MacOS、iOS、Android 和 Tizen (TV)。默认设置是从 Core 实现中以 .NET Standard 为目标。美好时光!
【解决方案2】:

根据文档here,在以下 6 种典型场景中,您应该使用 .NET Core,而不是 .NET Framework 或 Xamarin。

1。跨平台需求

显然,如果您的目标是拥有一个能够跨平台(Windows、Linux 和 MacOS)运行的应用程序(Web/服务),那么 .NET 生态系统中的最佳选择是使用 .NET Core 作为其运行时(CoreCLR)和库是跨平台的。另一种选择是使用 Mono Project。

这两种选择都是开源的,但 .NET Core 是由 Microsoft 直接和官方支持的,并且将在未来进行大量投资。

在跨平台使用 .NET Core 时,最好的开发体验存在于 Windows 上,Visual Studio IDE 支持许多生产力功能,包括项目管理、调试、源代码控制、重构、包括 Intellisense 在内的丰富编辑、测试等等。但也支持在 Mac、Linux 和 Windows 上使用 Visual Studio Code 进行丰富的开发,包括智能感知和调试。即使是 Sublime、Emacs、VI 等第三方编辑器也能正常工作,并且可以使用开源 Omnisharp 项目获得编辑器智能感知。

2。微服务

当您构建一个由多个独立、可动态扩展、有状态或无状态的微服务组成的面向微服务的系统时,您在这里拥有的巨大优势是您可以在微服务级别使用不同的技术/框架/语言。这使您可以在系统中的每个微区域使用最佳方法和技术,因此如果您想构建高性能和可扩展的微服务,您应该使用 .NET Core。最终,如果您需要使用任何与 .NET Core 不兼容的 .NET Framework 库,这没有问题,您可以使用 .NET Framework 构建该微服务,并且将来您可以将其替换为 .NET核心。

您可以使用的基础架构平台有很多。理想情况下,对于大型复杂的微服务系统,您应该使用 Azure Service Fabric。但对于无状态微服务,您还可以使用其他产品,例如 Azure App Service 或 Azure Functions。

请注意,截至 2016 年 6 月,并非 Azure 中的所有技术都支持 .NET Core,但随着 .NET Core 发布 RTM,Azure 中的 .NET Core 支持将急剧增加。

3。最佳性能和可扩展系统

当您的系统需要尽可能最佳的性能和可扩展性以便无论您拥有多少用户都能获得最佳响应能力时,那么 .NET Core 和 ASP.NET Core 才是真正大放异彩的地方。使用相同数量的基础架构/硬件,您可以做的事情越多,最终用户的体验就越丰富,而且成本更低。

摩尔定律提高单 CPU 性能的日子不再适用;然而,当您的系统正在增长时,您需要做更多的事情,并且需要更高的可扩展性和性能来满足日常要求更高的用户数量呈指数级增长。最终,您需要提高效率,在任何地方进行优化,并在机器、VM 和 CPU 内核的集群中更好地扩展。这不仅仅是用户满意度的问题。它还可以在成本/总体拥有成本方面产生巨大差异。这就是争取性能和可扩展性很重要的原因。

如前所述,如果您可以将系统的小部分隔离为微服务或任何其他松散耦合的方法,那就更好了,因为您不仅能够独立地发展每个小部分/微服务,而且拥有更好的长期的敏捷性和维护,但如果您需要做的事情与 .NET Core 不兼容,您也可以在微服务级别使用任何其他技术。最终,您将能够对其进行重构,并尽可能将其引入 .NET Core。

4。适用于 Mac、Linux 或 Windows 的命令行样式开发。

在使用 .NET Core 时,此方法是可选的。当然,您也可以使用完整的 Visual Studio IDE。但是,如果您是想要使用轻量级编辑器和大量使用命令行进行开发的开发人员,那么 .NET Core 是专为 CLI 设计的。它提供了可在所有支持的平台上使用的简单命令行工具,使开发人员能够在开发人员、实验室或生产机器上以最少的安装量构建和测试应用程序。 Visual Studio Code 等编辑器使用相同的命令行工具进行开发体验。像 Visual Studio 这样的 IDE 使用相同的 CLI 工具,但将它们隐藏在丰富的 IDE 体验之后。开发人员现在可以选择他们想要与工具链交互的级别,从 CLI 到编辑器再到 IDE。

5。每个应用程序级别需要并排的 .NET 版本。

如果您希望能够在 .NET 中安装依赖于不同版本框架的应用程序,则需要使用 .NET Core,它提供 100% 并排,如本文档前面所述。

6。 Windows 10 UWP .NET 应用。

此外,您可能还想阅读:

  1. When should I NOT use .NET Core?
  2. When should I still use .NET Framework 4.x, instead of .NET Core?
  3. When should I use Xamarin, instead of .NET Core?

【讨论】:

  • 为什么 asp.net Core 性能更高?为什么构建微服务更好?
  • 现在 Visual Studio for Mac 也可用。因此,对 .NET Core 的另一积极点是。 visualstudio.com/vs/visual-studio-mac
  • 您的链接已损坏
  • @JuanZamudio 框架的版本是单片层,每个层都依赖于前一个版本,在一个依赖链中返回到完全取代 1.1 的版本 2.0。因此,如果您使用 4.5 中的 anything ,则您隐含地依赖于 2.0 之前的所有内容。 Core 框架更多的是重构依赖关系以消除不相关的包袱,而不是重写 API,后者大部分但并非完全不变。有些事情也得到了极大的简化,例如 EF Core。
  • 它们只有一件事不同:MS 将在最近 5 年内放弃 Core。虽然程序员仍在使用 .NET FW 4.8 和 WinForms/WPF。
【解决方案3】:

你可以参考这一行——Difference between ASP.NET Core (.NET Core) and ASP.NET Core (.NET Framework)

Xamarin 根本不是辩论。当您想要使用 C# 构建移动(iOS、Android 和 Windows Mobile)应用程序时,Xamarin 是您的唯一选择。

.NET Framework 支持 Windows 和 Web 应用程序。现在,您可以使用 Windows 窗体、WPF 和 UWP 在 .NET Framework 中构建 Windows 应用程序。 ASP.NET MVC 用于在 .NET Framework 中构建 Web 应用程序。

.NET Core 是新的开源和跨平台框​​架,用于构建适用于所有操作系统(包括 Windows、Mac 和 Linux)的应用程序。 .NET Core 仅支持 UWP 和 ASP.NET Core。 UWP 用于构建 Windows 10 目标 Windows 和移动应用程序。 ASP.NET Core 用于构建基于浏览器的 Web 应用程序。

您想了解更多详细信息,请参阅此链接
https://blogs.msdn.microsoft.com/dotnet/2016/07/15/net-core-roadmap/ https://docs.microsoft.com/en-us/dotnet/articles/standard/choosing-core-framework-server

【讨论】:

  • 第三个框应该是“Mono”,这是 .Net 标准的另一种实现。 Xamarin 不是,它只是一个跨平台库,运行在 Mono (或曾经??) 之上。为了让事情变得更加混乱,Xamarin(该公司)收购了 Mono(该公司),后来都被微软收购了。
【解决方案4】:

.NET Core 是您现在应该使用的当前版本的 .NET(更多功能、修复错误等)

Xamarin 是一个为跨平台移动问题提供解决方案的平台,用 C# 编码,因此您无需单独为 IOS 使用 Swift,Android 也是如此。

【讨论】:

  • 如果您必须在 Linux 或 Linux 和 Windows 上运行,我会说 .Net Core 是您应该使用的。但我认为,你也可以为 Mono 提供这种情况。它当然没有更多的功能。根据定义,它只是“核心”位,没有 Windows 专用位,因此功能较少。我只是在猜测,但 .Net Core 似乎不太可能有更少的错误。 .Net 框架已经在世界上出现了近二十年。我想它在这一点上是相当久经沙场的。但这只是猜测。
  • 它当然有更多的新功能,他们最近添加了不会添加到 .NET 4.8 的新类。他们还移植了 WPF 和 WinForms。实际上,看起来 .NET Core 可以取代 .NET Framework。它似乎也更高效。
【解决方案5】:
  1. .NET 是基于 c# 语言的生态系统
  2. .NET Standard.NET 生态系统的标准(即规范)。

.Net 核心类库建立在 .Net 标准之上。 .NET Standard 您只能制作不能独立执行的类库项目,并且应该由另一个 .NET Core 或 .NET Framework 可执行项目引用。如果你想实现一个可移植到 .Net Framework.Net CoreXamarin 的库,选择 .Net 标准 图书馆

  1. .NET Framework 是一个基于 .NET 的框架,它支持 Windows 和 Web 应用程序

(您可以使用 .NET Framework 制作可执行项目(如控制台应用程序或 ASP.NET 应用程序)

  1. ASP.NET 是一种基于 .NET Framework 构建的 Web 应用程序开发技术
  2. .NET Core也是一个基于.NET的框架。

它是新的开源和跨平台框​​架,用于构建适用于所有操作系统(包括 Windows、Mac 和 Linux)的应用程序。

  1. Xamarin 是一个使用 C#
  2. 开发跨平台移动应用程序(iOS、Android 和 Windows Mobile)的框架

.NET Standard[blue] 的实现支持和完全支持 .NET Standard 的最小可行平台(最新:[https://docs.microsoft.com/en-us/dotnet/standard/net-standard#net-implementation-support]

【讨论】:

  • 删除了反对票,现在您已正确更新并记录了您的答案:-)
【解决方案6】:

.NET 5 将成为 2020 年 11 月推出的所有 .NET 变体的统一版本,因此不再需要在变体之间进行选择。

【讨论】:

  • 这是一个谎言。 .NET Core 无法在 Linux 上支持 WPF/WinForms!
  • 确实如此,但 .NET 的其他变体也不支持这一点。 .NET 变体的选择消失了,这是一件好事。
【解决方案7】:

Xamarin 用于手机应用程序(IOS/Android)。 .NET Core 用于设计可在 Apache 和 IIS 上运行的 Web 应用程序。

这就是两句话的区别。

【讨论】:

  • 嗯.. 除了缺少第三个选项(.net 框架)之外,这并不完全正确。 .NET 核心可用于几乎所有东西(Web、桌面、移动、云、游戏、物联网等)。 .NET Framework 以 Windows 为中心并且完全关闭。 Mono 是 Xamarin 使用的 .NET Framework 的开源(社区驱动)版本,它将跨平台移动工具置于 Mono 之上。 Xamarin 最终将被取代,最有可能被 Blazor 取代(目前是 pwa,但混合然后原生是路线图的一部分)。
  • 确实如此。 Xamarin 用于移动应用程序。我不认为它会很快被取代。 ASMX 仍用于 Web 服务,并包含在 Visual 2019 中。
【解决方案8】:
  • .NET Framework - Microsoft 的 .NET 仅适用于 Windows 的旧版实现。 2002 年推出,正在逐步淘汰。
  • .NET 5(.NET Core 3.1 的继承者)- .NET Framework 的现代重新实现旨在取代它,支持 Windows、macOS 和 Linux。 2016 年推出,进一步的版本可能会吸收 Xamarin
  • Xamarin - Mono 平台绑定到非 Windows 操作系统和 API 以及为移动应用程序开发(iOS、Android 和最近的桌面)量身定制的工具。 2012 年推出。Mono 是 .NET 的非 Microsoft 实现,由社区开发,于 2000 年代初推出,与 .NET Framework 竞争。

【讨论】:

    【解决方案9】:

    .Net Frame 工作用于 Windows 基础应用程序。 .Net Core Frame 工作用于跨平台基础应用程序。 Xamarin Frame 工作用于移动应用程序开发。

    【讨论】:

      【解决方案10】:
      1. .Net Framework(最新版本 4.8)仅支持 Windows 平台。意味着您的桌面应用程序只能在 Windows 上运行。并且 Web 应用程序只能托管在 Windows Server/Windows 操作系统上

      2. .Net Core(从 .net core 1、2、2.1、3.1、最新版本 5 开始)是交叉的 平台。(Windows、Linux、Mac)。

      3. 另一方面,Xamarin 支持移动平台。 (Android 和 IOS)。用于开发移动应用程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-08
        • 1970-01-01
        • 2021-11-17
        • 2020-05-08
        • 2016-10-07
        • 2015-10-27
        相关资源
        最近更新 更多