• .NET技术栈,大腿终于又变粗了


    .NET曾是在Windows平台上创建应用程序的杰出技术,但是在移动互联网时代营养不良,变得消瘦。但现在,.NET不仅仅是在Windows平台、也是在Linux和Mac平台上创建应用程序的杰出技术;.NET的大腿又逐渐变粗,壮汉慢慢归来。

    .NET技术体系

    .NET技术栈主要包含哪些内容?下图给出了.NET体系的一个整体结构。

    使用.NET Framework,可以创建Windows Form、WPF和在Windows上运行的旧ASP.NET应用程序;

    使用.NET Core,可以创建运行在不同平台上运行的ASP.NET Core和控制台应用程序。.NET Core也可以创建通用Windows应用(UWP)程序,但UWP只能在Windows平台上运行;因为UWP仍使用了Windows运行库,因此它只能在Windows上使用。

    Xamarin平台,基于Mono框架,可以使用C#为iPhone和Android开发应用程序。Xamarin提供了Xamarion.IoS和Xamarin.Android库,使用Xamrian.Forms就可以在两个移动平台之间共享用户界面。

    如上图,.NET Framework,.NET Core和Mono基于.NET Standard(一个标准)构建,他们可以使用相同的库,共享相同的编译器平台、编程语言和运行库组件。

    .NET Framework

     .NET Framework目前的最新版本是4.8,是在过去十几年(快20年了)不断增强的结果。过去很长一段时间使用它来构建基于Windows的Window Form、WPF和ASP.NET应用程序,而且将来也会继续持续一段时间;但它是封闭的。

    VersionDate.NET FrameworkCLRVisual Studio
    C# 1.0 2002.01 .NET Framework 1.0 1.0 VS 2002
    C# 1.1
    C# 1.2
    2003.10 .NET Framework 1.1 1.1 VS 2003
    C# 2.0 2005.11 .NET Framework 2.0 2.0 VS 2005
    C# 3.0 2007.11 .NET Framework 2.0
    .NET Framework 3.0
    .NET Framework 3.5
    2.0 VS 2008
    VS 2010
    C# 4.0 2010.04 .NET Framework 4 4.0 VS 2010
    C# 5.0 2012.08 .NET Framework 4.5
    .NET Framework 4.5.1
    4.0 VS 2012
    VS 2013
    C# 6.0 2015.07 .NET Framework 4.6 4.0 VS 2015
    C# 7.0 2017.03 .NET Framework 4.6.2 4.0 VS 2017
    C# 7.1 2017.08 .NET Framework 4.7 4.0 VS 2017 v15.3
    C# 7.2 2017.11 .NET Framework 4.7.1 4.0 VS 2017 v15.5
    C# 7.3 2018.05 .NET Framework 4.7.2 4.0 VS 2017 v15.7
    C# 8.0 2019.10 .NET Framework 4.8 4.0 VS 2019 v16.3

    .NET Core

    .NET Core是全新的.NET,是用现代技术和目标对.NET Framework的重写和加强扩展,它的设计起点就很高,很多.NET开发者也是看到这个MS重大更新才继续留在.NET阵营的。

    官方的简介:”.NET Core 是一个通用的开放源代码开发平台。 可以使用多种编程语言针对 x64、x86、ARM32 和 ARM64 处理器创建适用于 Windows、macOS 和 Linux 的 .NET Core 应用。 为云、IoT、客户端 UI 和机器学习提供了框架和 API。“;是不是看起来就很高大尚,而且激动人心。

    .NET Core 具有以下特性:

    • 跨平台 :可在 Windows、macOS 和 Linux 操作系统上运行。
    • 开放源代码: .NET Core 框架是开放源代码,使用 MIT 和 Apache 2 许可证。 .NET Core 是一个 .NET Foundation 项目。
    • 现代: 它实现了异步编程、使用结构的无复制模式和容器的资源调控等现代范例。
    • 性能: 通过各种功能(如硬件内部函数、分层编译和跨度<T>)来提供高性能。
    • 跨环境一致: 在多个操作系统和体系结构(包括 x64、x86 和 ARM)上以相同的行为运行代码。
    • 命令行工具: 包括可用于本地开发和持续集成的易于使用的命令行工具。
    • 部署灵活: 可以在应用中包含 .NET Core 或并行安装它(用户或系统范围安装)。 可搭配 Docker 容器使用。

    .NET Standard

    .NET Standard不是某一个具体的实现,而是一个协议/标准,这个标准定义了需要实现哪些API。.NET Framework、.NET Core和Xamarin都实现了这个标准,这也是为什么他们可以共用一些库。

      

    公共语言运行库(CLR - Common Language Runtime)

    使用.NET Framework的应用程序,和使用.NET Core的应用程序都需要CLR,分别是CLR和CoreCLR。CLR作用是什么呢?在.NET中,编译分为两个阶段:

    1. 将源代码编译为中间语言MSIL (Microsoft Intemediate Lanuage);

    2. CLR把MSIL编译为平台专用的本地代码。IL代码在.NET程序集中可用。在运行时,JIT编译器(新的JIT编译器是RyuJIT)编译IL代码,创建特定平台的本地代码。

    CLR除了JIT功能外,还包含:

    • CLR包含一个带有类型加载器的类型系统,负责从程序集中加载类型;
    • CLR包含垃圾回收器,从托管堆中清楚不再引用的内存;
    • CLR还负责线程的管理,基于.NET开发语言创建的线程不一定来自底层操作系统;线程的虚拟化和管理是又CLR负责。

    Windows运行库 - Windows Runtime

    从windows 8 开始,Windows操作系统提供了另一种框架:Windows运行库(Windows Runtime),这个运行库由WUP (Windows Uniersal Platform,Windows通用平台)使用。

    C#语言

    .NET平台上的开发语言有很多(如:C#、Visual Basic 和 F# ),但使用最多的还是C#。

    很久很久之前,因为版权的原因,微软并不能随意修改Java源代码,于是他们找来了Anders Hejlsberg,负责设计C#。在去微软工作前,Hejlsberg在Borland公司负责设计Delphi,一种基于Pascal的程序语言。起初他在微软负责J++(微软版Java)。由于Hejlsberg的个人经历,C#的设计思想主要借鉴了C++,Java以及Pascal。

    因为C#是在Java和C++之后设计的,微软分析了它们一些典型的编程bug,并试图通过语法规范使得使用C#的程序员避免同样的错误。

    NuGet

    和其他技术栈一样,.NET技术栈也有自己的包管理工具;NuGet是.NET平台的包管理器工具,NuGet包本质是一个zip文件,里面包含了一个或多个程序集、配置信息和PowerShell脚本。

    开发工具IDE

    • Visual Studio:不要争,这是宇宙第一IDE!

    • Visual Studio Code:短短几年就后来者居上,值得使用。

    .NET技术选择

    推荐的主流选择:

    • FrameWork: .NET Core > .NET Framework
    • Windows桌面应用:UWP > WPF > Windows Forms
    • Web应用:ASP.NET Core > ASP.NET > ASP.NET Web Forms / WCF

    天下合久必分,分久必合,.NET在今年年底将会统一各平台,统一命名为.NET 5。

    现在的.NET Core和未来的.NET技术栈的设计目标:

    .NET技术的未来

    查查过去几年微软的动作,你便知道.NET技术的未来会是怎么样。

    • 重写.NET平台.NET Core,并开源
    • Visual Code IDE - 后来者居上
    • 微软云平台Azure的发展
    • 收购GitHub,发力开源社区
    • 微软股票的市值
  • 相关阅读:
    Floydtemplate 示例
    dfa hdu 2222 AC自动机示例
    oj 中的 G++ 与 C++ 的区别
    System.Diagnostics.Process.Start(Info)
    自动关闭messagebox
    获取外部程序进程的SQL语句
    php 阿拉伯数字转中文数字 方法
    最新jQuery CHM版中文帮助文档
    parent.myFrame.cols ff 子窗体取得(访问)父窗体中另一子窗体的ID
    Jquery JS 正确的比较两个数字大小的方法
  • 原文地址:https://www.cnblogs.com/codesee/p/12990748.html
Copyright © 2020-2023  润新知