.Net 生态系统(framework vs core vs xamarin)

引言

最近, 微软刚刚发布.net core 2.0, dotnet世界有了一个新的开始. 但是这里有一些疑问,

  • .net core是不是dotnet的下一个版本? 无论如何asp.net 5直接就变成了asp.net core.
  • 微软是不是会放弃framework? 还有xamarin是不是会被core替代?
  • 如果我现在用dotnet开发, 应该选用core,还是framework,抑或Xamarin?

抱着这样的疑问, 我仔细探究了一下dotnet目前的生态系统,希望对大家有点帮助.

dotnet的生态化反图

经过多年的努力,在推出Core以后, 微软终于做到了当初的承诺, 一次编写到处运行了. 目前dotnet应该仅次于javascript了, 除了浏览器, dotnet应该都可以运行了.


dotnet生态图

从上图, 可以很简单的发现, .Net体系分为三大块,

  • 底层支持平台,包括编译器,运行时及CSharp/FSharp/VB.Net等
  • 标准类库,统一大部分通用的API
  • 应用模型, 适用于不同的操作系统

通过这张图, 我们可以很清楚的看出.Net Framework, .Net Core, Xamarin, 他们是平行的框架,不是互相取代的关系.

  • .NET Framework将继续在windows世界发力, 重点会在Desktop UI应用方面
  • .NET Core会在UWP及后端应用(Back-End)发力,适应现在Linux服务器满天飞的现状.
  • Xamarin 会继续在移动平台发力,作为一个快速App的工具

dotnet standard

.Net Standard是新推出来用以替代Portable, Standard和Portable之间,按照我的理解是替代关系, 将来Portable将慢慢消亡. Portable和Standard的关系如下表:

PCL Profile .NET Standard PCL Platforms
Profile7 1.1 .NET Framework 4.5, Windows 8
Profile31 1.0 Windows 8.1, Windows Phone Silverlight 8.1
Profile32 1.2 Windows 8.1, Windows Phone 8.1
Profile44 1.2 .NET Framework 4.5.1, Windows 8.1
Profile49 1.0 .NET Framework 4.5, Windows Phone Silverlight 8
Profile78 1.0 .NET Framework 4.5, Windows 8, Windows Phone Silverlight 8
Profile84 1.0 Windows Phone 8.1, Windows Phone Silverlight 8.1
Profile111 1.1 .NET Framework 4.5, Windows 8, Windows Phone 8.1
Profile151 1.2 .NET Framework 4.5.1, Windows 8.1, Windows Phone 8.1
Profile157 1.0 Windows 8.1, Windows Phone 8.1, Windows Phone Silverlight 8.1
Profile259 1.0 .NET Framework 4.5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8

有一点需要特别说明, standard并不算一个libarary, 而更多是一个标准, 不同的standard版本其实是对应的不同的API集合. 当然,版本号越小,支持的API越少. 但是支持的API越少,就意味着可以在更多的平台上运行. 我们开发的功能性类库应该都是Standard的,而且如果可能,应该使用小版本

如dotnet生态图的Base Libraries层可以看出, .Net标准库更像一个垫片层(Adaper设计模式),用来调用具体平台相关的实现库, 比如在windows平台就调用.Net Framework 类库, 在Linux上就调用CoreFx类库,而在移动平台则调用Mono类库.

standard和framework/core/xamarin之间的关系

.NET Standard 1.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0
.NET Core 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.0
.NET Framework (with .NET Core 1.x SDK) 4.5 4.5 4.5.1 4.6 4.6.1 4.6.2
.NET Framework (with .NET Core 2.0 SDK) 4.5 4.5 4.5.1 4.6 4.6.1 4.6.1 4.6.1 4.6.1
Mono 4.6 4.6 4.6 4.6 4.6 4.6 4.6 5.4
Xamarin.iOS 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.14
Xamarin.Mac 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.8
Xamarin.Android 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.5
Universal Windows Platform 10.0 10.0 10.0 10.0 10.0 vNext vNext vNext
Windows 8.0 8.0 8.1
Windows Phone 8.1 8.1 8.1
Windows Phone Silverlight 8.0

dotnet core

.NET Core是一个新版本的.NET,它是一个跨平台,开源和模块化的.NET平台,用于创建运行在任何地方(Windows,Linux和MacOS)的现代Web应用程序,微服务器,库和控制台应用程序。它更多的是为后端应用(back-end)准备的,所以core其实和asp.net core捆绑很紧密. 当然core还可以编写命令行程序, 也就是说我们在linux开发一些工具可以选择C#了. 这是一个很好选项. :-).

当然core还可以开发UWP的应用,对于UWP不太熟,好像发展的也不咋的.

  • core和原来的framework一个很大的区别是core所用的类库可以单独打包,并且可以把所有依赖项打包在一起, 发布core的应用可以不要求目标系统安装有dotnet的运行时了,非常方便发布了,而且发布包可以很小.
  • core和docker生态捆绑紧密,作为微服务开发的一个很好的选择

Core是一个.Net everywahre的唯一平台,有了core, CSharp经验终于可以应用于大部分开发工作了!

xamarin

Xamarin可以开发原生的AndroidiOSMacOS和Windows应用程序(这个还是用wpf/winform更方便)。
Xamarin平台基于Mono(Mono是来自社区Mono Project的.NET的原始开源和跨平台实现。)
传统上,Mono的API遵循.NET Framework的进展,而不是.NET Core。

除了跨平台的移动设备,使用Xamarin创建的应用程序本身提供与使用Objective-C / Swift / for iOS或Java for Android创建的应用程序相似的性能以及还有更大的体积:-(

Xamarin提供以下总结功能:

本地用户界面 - Xamarin应用程序是使用标准的本地用户界面控件构建的。
应用程序不仅看起来终端用户期望的方式;
他们也是这样做的。
本机API访问 - Xamarin应用程序可以访问底层平台和设备公开的全部功能,包括平台特定功能(如iBeacons和Android Fragments)。
本机性能 - Xamarin应用程序利用特定于平台的硬件加速,并针对本机性能进行编译。
在运行时解释代码的解决方案无法实现这一点。
生产力 -使用Xamarin.Forms开发人员可以使用与iOS,Android和Windows 10 UWP相同的逻辑和UI。

Xamarin架构图

在Xamarin的图中,您可以看到如何在Xamarin.iOS,Xamarin.Android甚至Windows 10的UWP项目之间的平台上共享客户端代码(通常是C#应用程序逻辑,如ViewModels,Models,Service Agents等)。

如果使用Xamarin.Forms,您还可以在平台之间共享相同的UI代码(Xamarin XAML定义页面/视图)。

注意:使用Xamarin,您还可以开发Mac(MacOS)应用程序,但图中没有表示,因为Xamarin的主要目的是“跨平台移动”。

dotnet framework

NET Framework是一个非常强大而成熟的框架,拥有一个庞大的类库(称为.NET Framework Class Library),可在Windows上支持各种各样的应用程序和解决方案。为您现有的应用程序和库提供了最高级别的兼容性。

它作为Windows操作系统的一部分运行,因此在新版本可用时或通过可选的独立安装程序通过Windows Update进行服务。当与Windows一起运送时,Windows 8附带4.5,Windows 8.1附带4.5.1,Windows 10附带4.6。对于服务器,Windows Server 2012附带4.5,Windows Server 2012 R2附带4.5.1。

自2002年发布以来,.NET Framework得到了开发人员的广泛支持,开发人员喜欢其一致的编程模型,易于使用Visual Studio入门的环境,调试和分析工具以及Microsoft的直接支持。它还使应用程序部署和维护直截了当。不过由于windows在服务器端的弱势, 现在.net其实一直在走下坡路.

在.NET Framework之上建立了多个应用程序堆栈,允许开发人员构建从控制台应用程序到富客户机(WPF)应用程序到可扩展Web应用程序的应用程序.Windows FormsWindows Presentation Foundation(WPF)Windows Communication Foundation (WCF)ASP.NET到v4.x,ASP.NET Web窗体ASP.NET MVCASP.NET WebAPISignalR等几个子框架。

虽然.NET Framework的代码是开源的,但只是部分开源,社区不活跃..NET Framework将继续发展,当下一版本的Windows操作系统发布时,通过发送新的更新.
.net framework始终是构建Windows桌面应用程序的最好已经最快的开发框架!

总结

回到开头的三个问题, 答案应该非常清楚了:

  • .Net Framework, .Net Core, Xamarin是三个基于dotnet的三个不同开发框架应用于不同场景, 他们可以通过.Net Standard共享代码.
  • 微软是不会放弃framework的,除非微软放弃windows :-)
  • 我们应该根据具体的开发场景选择不同的开发框架, 具体我的建议是:
  1. 所有的类库应该尽可能使用.net standard,以便在各个平台共享逻辑代码
  2. 后端代码(backend)因尽可能选择.Net Core, 特别是asp.net应该转换到asp.net core
  3. windows的桌面应用应该选择framework(UWP还是觉得不靠谱),特别是wpf,是开发桌面应用的一个好选择.
  4. 移动端的快速原型应该选用xamarin.
  5. 工具类的应用应该选择.net core

以上是我的个人见解,欢迎大家提出不同看法.

参考文献: https://blogs.msdn.microsoft.com/cesardelatorre/2016/06/27/net-core-1-0-net-framework-xamarin-the-whatand-when-to-use-it/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容