.NET Core、.NET Framework和Xamarin有什么区别?

429

微软现在拥有.NET Core、.NET Framework和Xamarin(Mono)这三种平台。

看起来它们之间存在很多重叠。那么这些不同类型的.NET平台之间有何区别?在我的项目中,我应该选择使用.NET Core而不是.NET Framework或Xamarin吗?


2
缺失的标签是“microsoft”,但实际上并不存在。这个问题假设了Microsoft的存在。今天你还需要在以下选项中进行选择:对于桌面GUI应用程序:例如Java。对于移动端:本地Android/Objective-C,或者其他许多跨平台框架之一。对于Web:例如Flask。正如提到.Net5的答案所示,微软正在拼命尝试在MS-Windows以外的其他平台上立足,并感受到开源Mono的竞争压力,但尚未找到稳定的解决方案。 - Roland
.net Framework是Windows特定的框架(旧版Windows Forms在此存在);.net core是跨平台的(新版Razor Pages在此存在);Xamarin是基于.net和c#开发移动应用程序的移动框架(包括xamarin.android、xamarin.ios和xamarin.forms)。如果您正在开发Web应用程序,请选择最新且推广的.net core。未来,将不再有.net core、.net framework或Xamarin,而只有“.Net”。 - lokesh
11个回答

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

1. 跨平台需求

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

这两种选择都是开源的,但.NET Core直接由Microsoft官方支持,并且将来会有大量投入。

在跨平台使用.NET Core时,在Windows上使用Visual Studio IDE可以获得最佳的开发体验,它支持许多生产力功能,包括项目管理、调试、源代码控制、重构、富编辑(包括Intellisense)、测试等等。但是,使用Visual Studio Code在Mac、Linux和Windows上也支持丰富的开发,包括intellisense和调试。即使像Sublime、Emacs、VI等第三方编辑器也很好用,可以使用开源Omnisharp项目获得编辑器智能提示。

2. 微服务

当您构建一个由多个独立的、动态可伸缩的、有状态或无状态微服务组成的微服务定向系统时,您在这里拥有的巨大优势是可以在微服务级别上使用不同的技术/框架/语言。这使您能够在系统中每个微区域中使用最佳的方法和技术,因此,如果您想要构建非常高效和可伸缩的微服务,应该使用.NET Core。如果需要使用任何与.NET Core不兼容的.NET Framework库,则没有问题,您可以使用.NET Framework构建该微服务,在未来可能能够用.NET Core替换它。

您可以使用多种基础设施平台,对于大型和复杂的微服务系统,理想情况下应该使用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性能的改进已经不再适用;然而,在您的系统不断增长并且需要更高的可扩展性和性能以满足日益增长的需求时,您需要做更多的事情。您需要更加高效,到处进行优化,并在机器、虚拟机和CPU核集群中实现更好的扩展性。这不仅关乎用户的满意度,还可能在成本/TCO方面产生巨大差异。这就是为什么要追求性能和可伸缩性的原因。

如上所述,如果您可以将系统的小部分隔离为微服务或任何其他松耦合方法,那么会更好,因为您不仅可以独立地发展每个小部分/微服务,并具有更好的长期敏捷性和维护性,而且还可以在微服务级别使用任何其他技术,如果您需要做的不兼容.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. 我何时不应使用.NET Core?
  2. 我仍应该在使用.NET Framework 4.x时,而不是.NET Core?
  3. 我何时应该使用Xamarin,而不是.NET Core?

18
为什么ASP.NET Core的性能更高?为什么在构建微服务时更好?ASP.NET Core在性能方面优于传统的ASP.NET,原因是因为它具有更高效的处理管道和更快的请求处理速度。在构建微服务方面,ASP.NET Core提供了轻量级和可扩展的框架,允许您根据需要添加或删除组件,从而使您的应用程序更加灵活。此外,它还支持跨平台开发,使您能够在不同操作系统上运行相同的代码。 - Juan Zamudio
4
现在,Visual Studio for Mac也已经推出了。这对.NET Core来说是又一个积极的因素。https://www.visualstudio.com/vs/visual-studio-mac/ - Hussain Mansoor
9
您的链接已损坏。 - shaneparsons
4
框架的版本是单块层,每个版本都依赖于之前的版本,在依赖链中回溯到完全替换1.1版本的2.0版本。因此,如果您使用4.5中的任何内容,则隐含地依赖于从2.0开始的所有内容。核心框架更多地关注重构依赖项以消除不相关的负担,而不是重写API,尽管大部分但并非全部未改变。有些东西也被大大简化了,比如EF Core。 - Peter Wone
1
它们只有一个不同之处:微软将在最近的5年内放弃Core。而程序员仍然使用.NET FW 4.8和WinForms/WPF。 - Vincent

202

这是微软的解释:

.NET Framework, .NET Core, Xamarin

.NET Framework是Windows操作系统中分发的“完整”或“传统”的.NET版本。如果您正在构建桌面Windows或UWP应用程序,或者使用旧版ASP.NET 4.6+,请使用此版本。

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

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

Xamarin通常运行在Mono之上,这是一个为了支持跨平台而构建的.NET版本,在Microsoft决定正式采用.NET Core进行跨平台开发之前就已经存在。与Xamarin一样,Unity平台也运行在Mono之上。


一个常见的困惑点是ASP.NET Core的定位。ASP.NET Core可以在.NET Framework(Windows)或.NET Core(跨平台)之上运行,详细信息请参见此答案:ASP.NET Core (.NET Core)和ASP.NET Core (.NET Framework)之间的区别

6
每当有人说 .NET Core 是跨平台的时候,新手开发者会感到困惑。'.NET Core' 仅支持 UWP + ASP.NET Core,而 ASP.NET Core 是跨平台的,而 UWP 则不是。请注意,这里只是翻译内容,没有任何解释或其他额外信息。 - MD TAREQ HASSAN
1
@HassanTareq 这并不完全正确。.NET Core 是指可以在 Windows、Mac 或 Linux 上运行的运行时和库。ASP.NET Core 是跨平台的,因为 .NET Core 是跨平台的。 - Nate Barbettini
1
如果您提到尽管 .Net Core(运行时和库)是跨平台的,但我们不能在 Mac/Linux 上使用 UWP 应用程序,那么对于新手来说这将非常有帮助。UWP 不是跨平台的,我本来期望 UWP 成为 WPF 的跨平台替代品(Xamarin.Forms 就是)。 - MD TAREQ HASSAN
@HassanTareq 好的建议,我已经编辑了我的答案。 - Nate Barbettini
UWP 运行在 .NET Core 上而不是 .NET Framework 上。如果我错了,请纠正我。参考链接:https://blogs.msdn.microsoft.com/dotnet/2016/05/27/making-it-easier-to-port-to-net-core/ - Dishant
1
Xamarin Forms现在可以从一个代码库运行在几乎所有平台上,包括Windows UWP桌面、WPF桌面、MacOS、iOS、Android和Tizen(电视)。默认情况下,目标是从核心实现中使用.NET Standard。好时代! - Sean Anderson

53

您可以在此行中参考- ASP.NET Core (.NET Core)和ASP.NET Core (.NET Framework)之间的区别

.NET Framework,.NET Core,Xamarin

Xamarin并没有任何争议。当您想要使用C#构建移动应用程序(iOS、Android和Windows Mobile)时,Xamarin是您唯一的选择。

.NET Framework支持Windows和Web应用程序。今天,您可以使用Windows Forms、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://learn.microsoft.com/en-us/dotnet/articles/standard/choosing-core-framework-server


第三个框应该是“Mono”,它是 .Net Standard 的另一个实现。Xamarin 不是,它只是一个在 Mono 之上运行的跨平台库 _(或者说曾经是?)_。为了让事情更加混乱,Xamarin(公司)收购了 Mono(公司),然后两者都被微软收购了。 - BlueRaja - Danny Pflughoeft

24
  • .NET 是基于c#语言的生态系统。
  • .NET Standard.NET生态系统的标准(换句话说,规范)。
  • .NET 核心类库是建立在.NET Standard之上的。使用.NET Standard只能创建类库项目,这些项目无法独立执行,必须被其他.NET Core或.NET Framework可执行项目所引用。如果要实现一个可以在.Net Framework.Net CoreXamarin之间移植的库,请选择.Net Standard库。
  • .NET Framework 是基于.NET的框架,支持 Windows 和 Web 应用程序。
  • ASP.NET 是基于.NET Framework开发的Web应用程序开发技术。
  • .NET Core 也是基于.NET的框架。它是新的开源跨平台框架,可用于构建适用于所有操作系统,包括Windows、Mac和Linux的应用程序。
  • Xamarin是一个使用C#开发跨平台移动应用程序的框架(iOS,Android和Windows Mobile)。
  • .NET Standard[蓝色]的实现支持和完全支持.NET Standard的最小可行平台(最新版本:[https://learn.microsoft.com/en-us/dotnet/standard/net-standard#net-implementation-support])


    18

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

    enter image description here


    4
    这是谎言,.NET Core 无法在 Linux 上支持 WPF/WinForms! - Vincent
    没错,但其他版本的.NET也不支持这个。选择.NET的变体已经消失了,这是一件好事。 - yanlend
    一些库在.NET Core 5/6中不受支持,如果要使用它们,您需要切换到.NET Framework。 - undefined

    6

    [截至2022年2月]

    .NET框架

    • 专有的框架
    • 主要用于Windows操作系统
    • 版本4.8是它的最终版本。
    • 对它的支持可能会随着Windows 10(及其其他服务器兄弟)的结束而结束

    .NET (之前称为.NET Core)

    • 免费且开源
    • 跨平台
    • .NET Framework的继承者
    • 目前.NET 6是LTS版本

    Xamarin

    • 免费且开源
    • 用于使用.NET和C#构建Android和iOS应用程序
    • 属于.NET的一部分

    4
    • .NET Framework - 微软只为Windows操作系统实现的旧版.NET技术。自2002年推出以来,已逐渐停用。
    • .NET 5(.NET Core 3.1的继任者)- 现代化重新实现的.NET技术,旨在取代.NET Framework,支持Windows、macOS和Linux等多种平台。该技术于2016年推出,未来版本可能吸收Xamarin技术。
    • Xamarin - Mono技术在非Windows操作系统上的平台绑定,提供专门针对移动应用(iOS、Android及最近的桌面端)开发所需的API和工具。Xamarin于2012年推出。Mono是由社区开发的非微软实现的.NET技术,并在21世纪初推出,与.NET Framework相互竞争。

    3

    .NET Core是目前应该使用的.NET版本(更多功能,修复错误等)。

    Xamarin是一个平台,提供用C#编写的跨平台移动问题解决方案,因此您无需单独使用Swift进行iOS开发,同样适用于Android。


    2
    如果你必须在Linux或Linux和Windows上运行,我会说.Net Core是你应该使用的。但我认为你也可以为Mono辩护。它肯定没有更多的功能。根据定义,它只有“核心”部分,没有任何Windows-only的部分,因此功能更少。我只是猜测,但似乎不太可能.Net Core有更少的错误。.Net Framework已经在世界上存在了将近二十年。我想它现在已经很经过实战考验了。但这只是一个猜测。 - Jason Boyd
    它肯定有更多的新功能,他们最近添加了新类,这些类不会添加到.NET 4.8中。他们还移植了WPF和WinForms。实际上,.NET Core看起来可以取代.NET Framework。它似乎性能更好。 - asdf

    1
    1. .Net Framework(最新版本4.8)仅支持Windows平台。这意味着您的桌面应用程序只能在Windows上运行。Web应用程序只能托管在Windows Server / Windows OS上。

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

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


    0

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

    这就是两个句子的区别。


    嗯...除了缺少第三个选项(.net框架)之外,这并不完全正确。.NET Core可以在几乎所有平台上使用(网络、桌面、移动、云、游戏、物联网等)。.NET Framework是以Windows为中心的,并且完全封闭。Mono是.NET Framework的开源(社区驱动)版本,由Xamarin使用,在Mono之上提供跨平台移动工具。Xamarin最终将被取代,很可能是由Blazor(目前是pwa,但混合然后本地化是路线图的一部分)取代。 - shox
    没错,Xamarin是用于移动应用程序的。我认为它不会很快被取代。ASMX仍然用于Web服务,并包含在Visual 2019中。 - user10868910

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