美文网首页.NET程序员dotNET
.Net 生态系统(framework vs core vs x

.Net 生态系统(framework vs core vs x

作者: 灭蒙鸟 | 来源:发表于2017-08-21 11:29 被阅读733次

    引言

    最近, 微软刚刚发布.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/

    相关文章

      网友评论

        本文标题:.Net 生态系统(framework vs core vs x

        本文链接:https://www.haomeiwen.com/subject/keccdxtx.html