zoukankan      html  css  js  c++  java
  • .NET平台系列19 新世界中的.NET大统一平台架构解析

      微软在.NET跨平台之路上付出了巨大的艰辛,同时做了海量的工作。首先推出了统一的API标准规范库 .NET Standard,并不断补充完善标准库,截止目前(2021-5-26)最新版本为 .NET Standard 2.1。之后发布了跨平台解决方案 .NET Core,同时建立.NET基金会,并大力发展生态建设,世界知名IT公司纷纷加入并贡献,社区发展异常活跃。收购Xamarin公司后,Mono也正是加入微软大家庭,填补了微软技术栈在移动APP开发领域的技术空白。

    自此微软.NET进化成了如下图所示的全新大统一架构。

    .NET Framework

     

     .NET Framework开发平台包括公共语言运行库(CLR)和基类库(BCL),前者负责管理代码的执行,后者提供了丰富的类库来构建应用程序。微软最初设计.NET Framework是为了使应用具有跨平台的可能性,但是微软在将他们的实现努力投入,发现这一平台在 Windows上工作得最好。

      自.NET Framework4.5.2成为 Windows操作系统的官方组件以来,NET Framework已经安装在超过10亿台计算机上,所以对它的改动必须尽可能少。即使是修复bug也会导致问题,所以更新频率很低。在计算机中,为.NET Framework编写的所有应用程序都共享相同版本的CLR以及存储在全局程序集缓存(GAC)中的库,如果其中一些应用程序需要特定版本以保证兼容性,就会出问题。

      实际上,.NET Framework仅适用于 Windows系统,因为是旧平台,所以不建议使用它创建新的应用程序。

      应用场景:针对传统的桌面端解决方案,采用WPF与WinForm。

    .NET Core

      现代移动技术和计算的发展使得 Windows作为操作系统变得不那么重要了。正因为如此,微软一直致力于将.NET从它与 Windows的紧密联系中分离出来。在将 .NET Framework重写为真正跨平台的同时微软也利用这次机会重构并删除了不再被认为是核心的主要部分。

      新产品被命名为 .NET Core,其中包括名为 CoreCLR 的 CLR 跨平台实现和名为 CoreFX 的精简类库。

      微软负责.NET的项目经理 Scott Hunter认为:“.NET Core客户中有40%是全新的平台开发人员这正是我们想要的结果。我们想引入新人。”

      .NET Core的运行速度很快,因为它可以与应用程序并行部署,所以.NET Core可以频繁地更改,因为这些更改不会影响同一台计算机上的其他 .NET Core 应用程序。微软对 .NET Core 所做的改进无法添加到NET Framework中。

      应用场景:针对跨平台(Windows、Linux、macOS)的解决方案,如物联网IoT、人工智能AI、AR、MR、Web等。

    Xamarin

      第三方公司开发了名为 Mono 项目的 .NET Framework实现。Mono是跨平台的,但是它远远落后于.NET Framework的官方实现。Mono 作为 Xamarin移动平台以及 Unity 等跨平台游戏开发平台的基础,已经找到了自己的价值。

      微软在2016年收购了 Xamarin,并且在 Visual Studio2019中免费提供曾经昂贵的 Xamarin扩展。微软将只能创建移动应用程序的 Xamarin Studio开发工具更名为 Visual Studio2019 for Mac,并赋予它创建其他类型应用程序的能力。有了 Visual Studio201 99 for Mac,微软就能够将 Xamarin Studio编辑器的部分功能替换为 Visual Studio2019 for Windows的部分功能,以提供更接近的体验和性能。

      应用场景:针对移动端的解决方案,如iOS、Android、tvOS 和 watchOS。 

    .NET Standard

    .NET平台发展至今,微软控制着三个技术平台,如上图所示。

    • .NET Framework:用于旧应用
    • .NET Core:用于跨平台和新应用
    • Xamarin:用于移动应用

      以上每种.NET平台都有优点和缺点,因为它们都是针对不同的场景设计的。这导致如下问题:开发人员必须学习三个.NET平台,每个.NET平台都有令人讨厌的怪癖和限制。因此,微软定义了.NET Standard,它是一套所有.NET平台都可以实现的API规范,从而用来控制它们的兼容性级别。例如,与 .NET Standard1.4兼容的平台表明提供基本的支持。

      在.NET Standard 2.0及以后版本中,微软已将这三种.NET平台融合到现代的最低标准,这使开发人员可以更容易地在任何类型的.NET之间共享代码。在.NET Core2.0及以后版本中,微软增加了许多缺失的API,开发人员需要将为.NET Framework编写的旧代码移植到跨平台的.NET Core中。但是有些AP已经实现了,可以抛出异常来指示开发人员,不应该实际使用它们。这通常是由于运行 .NET Core的操作系统不同导致的。

      理解 .NET Standard 只是一种标准是很重要的。不能像安装HTML5那样安装.NET Standard。要使用HTML5,就必须安装实现了HTML5标准的Web浏览器。

      要使用 .NET Standard,就必须安装实现了.NET Standard规范的.NET平台。 .NET Standard2.0是由最新版本的 .NET Framework、.NET Core和 Xamarin实现的。

      最新的.NET Standard2.1仅由. NET Core3.、Mono和 Xamarin实现。C#8.0的一些特性需要.NETStandard2.1,.NET Framework4.8没有实现.NET Standard2.1,所以应该把 .NET Framework 当作旧技术。

    .NET Standard 具体介绍与使用,请参考我的博客:

    Common Infrastructure

      公共基础设施,简称CI。位于架构的最底层,构建于操作系统之上。主要包含开发语言、编译器、运行时。详细介绍请参考我的博客《.NET平台系列2 .NET Framework 框架详解》《.NET平台系列7 .NET Core 体系结构详解》

    开发工具
    • Visual Studio 微软官方推出的宇宙第一IDE,它是一个完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等。

    从 Visual Studio 第一代产品到目前的 Visual Studio 2019,它们与Windows系统紧密绑定,跨平台需求出现以后,微软又开发了支持跨平台的开发工具 Visual Studio for Mac。下载地址:Windows 版& Mac 版 Visual Studio 2019 (microsoft.com)

     

    • Visual Studio Code 微软在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的轻量级工具 Visual Studio Code,它是针对于编写现代Web和云应用的跨平台源代码编辑器, 可在桌面上运行,并且可用于Windows,macOS和Linux。它具有对JavaScript,TypeScript和Node.js的内置支持,并具有丰富的其他语言(例如C++,C#,Java,Python,PHP,Go)和运行时(例如.NET和Unity)扩展的生态系统。

    随着VS产品的不断升级,功能越来越强大,自然就导致该产品比较庞大,稍显笨重,对开发者的电脑硬件配置要求也不断提高。并且包括Visual Studio 2019在内,VS一直都是32位的应用程序,主进程最多只能4GB,因此限制了VS的使用场景。2021年4月18号微软宣布将于今年夏季发布首个64位的 Visual Studio 2022

    官方放出的测试视频,Visual Studio2022打开一个包含 1600 个项目和约 30 万个文件的解决方案,最高内存占用到5G+都没问题!Visual Studio 2022还将大幅提升文件打开速度、代码调试性能、代码搜索性能,还将有着更强大的AI IntelliCode 引擎做代码预测,还有更好的macOS支持等各种改进,在宇宙第一IDE的道路上继续狂奔!


    参考文献:

    • 解微软对 .NET Core和.NET Framework的定位 https://devblogs. microsoft. com/dotnet/update-on-net-core-3-0-and-net-framework-4-8
    • Mono:https://www.mono-project.com/
    • Unity:https://www.mono-project.com/
    • https://visualstudio.microsoft.com/zh-hans/downloads/
    • https://devblogs.microsoft.com/visualstudio/visual-studio-2022/
    • https://github.com/dotnet/standard/blob/master/docs/versions.md.

    成在管理,败在经验;嬴在选择,输在不学!  贵在坚持!

    欢迎关注作者头条号 张传宁IT讲堂,获取更多IT文章、视频等优质内容。

       

     个人作品

       

        1、BIMFace.Community.SDK.NET

         开源地址:https://gitee.com/NAlps/BIMFace.SDK

         系列博客:https://www.cnblogs.com/SavionZhang/p/11424431.html

         系列视频:https://www.cnblogs.com/SavionZhang/p/14258393.html

       

        2、ZCN.NET.Common

         开源地址:https://gitee.com/NAlps/zcn.net.common

     技术栈

       

     1、Visual Studio、.C#/.NET、.NET Core、MVC、Web API、RESTful API、gRPC、SignalR、Python

     2、jQuery、Vue.js、Bootstrap

     3、数据库:SQLServer、MySQL、PostgreSQL、Oracle、SQLite、Redis、MongoDB、ElasticSearch、TiDB、达梦DM、人大金仓、 神通、南大通用 GBase、华为 GaussDB 、腾讯 TDSQL 、阿里 PolarDB、蚂蚁金服 OceanBase、东软 OpenBASE、浪潮云溪数据库 ZNBase

     4、ORM:Dapper、Entity Framework、FreeSql、SqlSugar、分库分表、读写分离

     5、架构:领域驱动设计 DDD、ABP

     6、环境:跨平台、Windows、Linux(CentOS、麒麟、统信UOS、深度Linux)、maxOS、IIS、Nginx、Apach

     7、移动App:Android、IOS、HarmonyOS、微信、小程序、快应用、Xamarin、uni-app、MUI、Flutter、Framework7、Cordova、Ionic、React Native、Taro、NutUI、Smobiler

       

     云原生、微服务、Docker、CI/CD、DevOps、K8S;

     Dapr、RabbitMQ、Kafka、分布式、大数据、高并发、负载均衡、中间件、RPC、ELK;

     .NET + Docker + jenkins + Github + Harbor + K8S;

    出处:www.cnblogs.com/SavionZhang

    作者:张传宁   微软MCP、系统架构设计师、系统集成项目管理工程师、科技部创新工程师。

              专注于微软.NET技术(.NET Core、Web、MVC、WinForm、WPF)、通用权限管理系统、工作流引擎、自动化项目(代码)生成器、SOA 、DDD、 云原生(Docker、微服务、DevOps、CI/CD);PDF、CAD、BIM 审图等研究与应用。

              多次参与电子政务、图书教育、生产制造等企业级大型项目研发与管理工作。

              熟悉中小企业软件开发过程:需求分析、架构设计、编码测试、实施部署、项目管理。通过技术与管理帮助中小企业快速化实现互联网技术全流程解决方案。

             


             

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    如有问题,可以通过邮件905442693@qq.com联系。共同交流、互相学习。

    如果您觉得文章对您有帮助,请点击文章右下角【推荐】。您的鼓励是作者持续创作的最大动力!

  • 相关阅读:
    racket eval
    mex不兼容
    【转】雷军 程序员随想
    UBoot 目录结构和编译过程
    远程监控web开发
    STL容器[08]
    STL容器[07]
    STL容器[17]
    STL容器[06]
    stl.map使用总结
  • 原文地址:https://www.cnblogs.com/SavionZhang/p/14813862.html
Copyright © 2011-2022 走看看