本文已经同步到微信公众号「极客起源」 。

现在都在谈论全场景开发,也就是用一套开发工具,可以开发包括但不限于桌面、移动、IOT、游戏、Web等平台的应用。这样对于开发人员是非常爽的。本文将介绍微软推出的开发平台:.net 5,这个开发平台将完美地满足我们的各种开发需求。.net 5也是.net家族的下一代产品。

 
我们只需要使用.net 5,就可以为Windows、Linux、macOS、iOS、Android、tvOS、watchOS、Web等平台开发应用,是不是很酷呢?本文会介绍一下.net 5的一些新特性。并亲手开发我们的第一个基于.net 5的程序。

 从.NET Core项目开始以来,微软已经向该平台添加了大约五万个.NET Framework API。 .NET Core 3.0为了缩小与.NET Framework 4.8的功能差距,添加了Windows Forms,WPF、Entity Framework6等功能。.NET5在此基础上,利用.NET Core和Mono的优势创建了一个单一平台,你可以将其用于所有的现存的.net代码,一个完整的与.net framework平齐的跨平台开发平台终于诞生了。
 
微软计划在2020年11月发布.NET 5的正式版,目前已经发布了.NET 5的预览版。
 
1. .NET 5 = 下一代.NET Core
 
.NET 5是.NET Core的下一步计划。 该项目旨在通过一些下面的一些方式来改进.NET:
 
(1)拥有单一的.NET运行时和框架,该框架可在任何地方使用,并具有统一的运行时,开发者在任何地方都可以使用他们的开发经验;
(2)通过充分利用.NET Core,.NET Framework,Xamarin和Mono来扩展.NET的功能;
(3)用单个代码库构建该产品,开发人员(Microsoft和社区)可以一起工作并一起扩展,从而改善了所有方案;
 
这个新的项目和方向改变了.NET的游戏规则。 使用.NET 5,无论您要构建哪种类型的应用,代码和项目文件的外观看起来都是一样的。 你将可以使每个应用程序访问相同的运行时,API和语言特性。 这包括几乎每天都致力于corefx的新性能改进。
 
当然,目前.net core拥有的仍然继续存在并完善,例如:
(1)在GitHub上的开源和面向社区;
(2)跨平台支持;
(3)支持利用特定于平台的功能,例如Windows上的Windows Forms和WPF以及从Xamarin到每个本地平台的本地绑定;
(4)高性能;
(5)并排安装(多个.net core版本共存);
(6)多种开发工具(Visual Studio、Visual Studio for Mac和Visual Studio Code);
 
下面是.net 5的一些新特性:
(1)在运行时体验上有更多选择(见下面的内容);
(2)Java互操作性将在所有平台上可用;
(3)在多个操作系统上将支持Objective-C和Swift的互操作;
(4)CoreFX将得到扩展,以支持.NET的静态编译(ahead-of-time – AOT),占用更小的空间以及对更多操作系统的支持;
 
计划2020-11发布.net 5.0的正式版,以后打算每年11月发布一个主要的版本,下图是.net的发布计划表。也就是说,明年的11月份,我们将迎来.net 6.0 LTS。其中LTS是长期支持版。
 
 
 
可能有的同学会注意到,为什么没有.NET 4呢?这里直接跳过了第4版,是因为它会使熟悉.NET Framework的用户感到困惑,.NET Framework已经使用4.x系列已有很长时间了,此外,微软想清楚地传达.NET 5是.NET平台的未来。
 
除此之外,微软还借此机会简化了命名。 微软认为,如果只推出一个.NET,就不需要像“core”这样的澄清术语。 简称是一种简化,也表明.NET 5具有统一的功能和行为。 如果愿意,可以继续使用“ .NET Core”。这就意味着以后微软官方正式的名字不再有core,而是.NET 6、.NET 7等。
 
2. 微软的野心与运行时们
 
微软一直想统一各个平台的开发框架,现在终于通过.net 5得以实现。这样微软就可以为未来的新平台以近乎零成本移植程序了。而这一切都是从一个跨平台运行时Mono开始的!
 
Mono是.NET的原始跨平台实现。它最初是.NET Framework的开源替代方案,并随着iOS和Android设备的流行而转变为可以开发Android和iOS App。这样Mono就作为了Xamarin的运行时 成为了Xamarin的一部分。
 
CoreCLR是用于.NET Core的运行时。它的主要目标是支持云应用,包括微软最大的服务,现在也用于Windows桌面,物联网和机器学习应用程序。
 
综上所述,.NET Core和Mono运行时有很多相似之处(毕竟它们都是.NET运行时),但也具有宝贵的独特功能。使选择所需的运行时体验变得有意义。现在微软正在互相替代CoreCLR和Mono。以便让它像构建开关一样简单,可以在不同的运行时选项之间进行选择。
 
下面的内容描述了微软计划为.NET 5设计的主要特性。它们提供了清晰的视图,说明了微软计划如何分别以及一起发展两个运行时。
 
3. 高吞吐量与高生产率
 
从一开始,.NET就依靠即时编译器(JIT)将中间语言(IL)代码转换为优化的机器代码。从那时起,我们就建立了行业领先的基于JIT的托管运行时,该运行时具有很高的吞吐量,并且还为开发人员提供了使编程变得快速简便的体验。
 
JIT非常适合长期运行的云和客户端方案。他们能够生成针对特定机器配置(包括特定CPU指令)的代码。 JIT还可以在运行时重新生成方法,该技术用于快速JIT,同时如果可以成为一种经常使用的方法,还可以选择生成代码的高度优化版本。
 
 
开发者工具是JIT的另一个很好的例子,例如dotnet watch工具对代码编辑并继续运行。工具通常需要在一个进程中多次编译和加载代码,而无需重新启动,因此需要非常快速地执行。使用.NET Core或.NET Framework的开发人员主要依靠JIT。因此,这种体验应该看起来很熟悉。
 
大多数.NET 5工作负载默认使用基于JIT的CoreCLR运行时。 iOS和客户端Blazor(Web程序集)是两个值得注意的例外,因为它们都需要提前(AOT)本机编译。
 
4. 快速启动,占用更少的空间以及和使用更少的内存
 
Mono Project已将大部分精力集中在移动和游戏机上。该项目的关键功能和成果是基于业界领先的LLVM编译器项目的.NET AOT编译器。 Mono AOT编译器使.NET代码可以内置到可以在计算机上运行的本地可执行文件中,这与C ++代码非常相似。 AOT编译的应用程序可以在较小的地方高效运行,并在需要时交换吞吐量以进行启动。
 
Blazor项目已经在使用Mono AOT。这将是过渡到.NET 5的首批项目之一。微软会将其用作证明该计划的方案之一。
 
AOT解决方案有如下两种:
 
(1)需要100%AOT编译的解决方案;
(2)其中大多数代码都是AOT编译的,但是可以使用JIT或解释器并将其用于对AOT不友好的代码模式(如泛型);
 
Mono AOT支持两种情况。通常,出于安全原因,Apple对于iOS和某些游戏机要求使用第1类AOT。第2个是首选,因为它提供了AOT的优点而没有任何缺点。
 
.NET Native是我们用于Windows UWP应用程序的AOT编译器,并且是上面列出的第一类AOT的示例。通过该特定实现,限制了你可以使用的.NET API和功能。
 
iOS,Web程序集和某些游戏机仍需要AOT编译。对于需要快速启动和/或占用低空间的类似设备的应用程序,AOT编译将称为成为一种选择。
 
5. 开发第一个基于.NET 5的应用程序(包含断点调试功能)
 
到现在为止,我们已经了解了.NET 5的基本功能和目标,以及新特性。是时候开始操练一下了。开发.net应用的IDE有如下3个:
 
(1)Visual Studio(Windows)
(2)Visual Studio for mac(macOS)
(3)Visual Studio Code(跨平台)
 
如果使用前两个IDE,需要安装2019及以上版本,而且这两套IDE比较大,安装需要更长的时间。如果只是学习C#和.NET 5的API,推荐使用Visual Studio Code,这款IDE更轻量,而且使用起来并不比Visual Studio逊色。
 
在正式开发之前,先要安装.NET 5,读者可以到下面的页面下载.net 5的最新版(注意自己用的OS平台)。
 
.net 5支持的CPU架构非常全,如下图所示。如果用Linux或Windows,可以选择x86架构或ARM架构的机器。
 
下载完,直接安装即可,这个不用犹豫,因为so easy,这里就不详细介绍安装过程了。本文使用的是macOS版本的.net 5,其他平台的.net 5版本的使用方法类似。
 
安装完.net 5后,可以在终端输入下面的命令测试一下是否安装成功。
 
dotnet --version
 
如果输出如下内容,说明.net 5已经安装成功。
 
5.0.100-preview.8.20417.9
 
接下来到下面的页面去下载Visual Studio Code吧。
 
 
读者需要根据自己使用的操作系统平台下载特定版本的Visual Studio Code,如下图所示。下载完了,直接安装或运行即可。
 

Visual Studio Code一开始并不支持.net 5开发,需要安装各种插件。现在打开Visual Studio Code,切换到插件页面(点击左侧第5个按钮),并在插件搜索栏中输入C#,会列出如下图所示的插件。第1个是必须安装的,其他一些包含C#的插件,大家能安装就安装一下吧,多多益善,反正我是大多数都安装了。右侧显示绿色“安装”按钮的是还未安装的插件,没有该按钮的是已经安装的插件,点击插件,会在右侧显示插件的详细信息。

Visual Studio Code的工程是以文件夹形式管理的。第1次打开Visual Studio Code,是如下图这样的。点击“打开文件夹”按钮打开一个文件夹,就相当于打开一个工程了,如果是个空文件夹,那么就是空工程。也可以先建立一个空文件夹,然后再打开该文件夹

这里新创建一个名为first的文件夹,然后打开该文件夹,如下图所示。当鼠标放到文件夹上时,右侧会显示4个按钮,其中第2个是新建子文件夹。

 现在在first下新建一个名为src的子文件夹,并且在该文件夹的右键菜单中点击“在集成终端中打开”,如下图所示。

这时会在右下角打开一个终端,在终端输入dotnet new console命令,会创建一个控制台.net工程,如果输出如下图所示的信息,说明创建.net工程成功了。

 这时应该在src目录中生成一堆文件和目录,如果Visual Studio Code左侧工程树没有刷新,重启一下就出来了。在生成的若干文件中有一个Program.cs文件,是.net 应用的入口文件,因为该文件中有一个Main方法。已经有一行输出文本的例子了,如下图所示。

接下来在终端输入dotnet run命令,系统就会编译和运行当前的.net 工程,并输出如下图所示的结果。

不过现在都是通过命令行运行应用,非常不方便。其实Visual Studio Code也有直接通过IDE运行和调试的功能。现在切换到“运行”页面,如下图所示。

然后点击“创建launch.json文件”链接,会弹出如下图的选项列表,选择第1个(.NET Core)。

这时会创建一个如下图所示的launch.json文件。

 

还需要重新打开一下first工程,然后再次切换到“运行”页面,会看到上方有一个运行按钮,如下图所示。

 

现在点击“运行”按钮,会在终端输出运行信息,如下图所示。

很明显,程序的输出信息也在里面。

 
下面我们来编写一个用于计算阶乘的C#程序,代码如下:

using System;

namespace src
{
class Program
{
static int factorial(int n) {
if(n == ) {
return ;
} else {
return n * factorial(n - );
}
} static void Main(string[] args)
{
Console.WriteLine("10! = " + factorial());
}
}
}
 
运行程序,会输出如下内容:
10! = 3628800
 
当然,Visual Studio Code同样支持断点调试功能,只需要用鼠标单击需要设置断点的代码行前面,就会显示一个表示断点的红点,现在运行程序,程序就会停到断点的位置,然后可以单步跟踪代码了,如下图所示。
 
 
本文是关于.net 5和C# 9的第1篇文章,后续将推出系列文章,详细介绍如何用Visual Studio Code、Visual Studio 2019、.NET 5以及C# 9开发更复杂的应用。
 

终于开始了,微软的野心将通过全场景开发平台dotnet 5体现得淋漓尽致!的更多相关文章

  1. 基于微软开发平台构建和使用私有NuGet托管库

    本篇blog包含使用TFS2017,VS2017等平台和工具搭建和使用NuGet库等基本过程,为团体提供更加自动化和高效的研发活动支持. 作为以产品线或者以专属业务为扩展的项目类型的软件研发团体,都会 ...

  2. 一行导出所有任意微软SQL server数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解

    文章标题: 一行导出所有任意微软SQL serer数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解 关键字 : mssql-scripter,SQL Server 文章分 ...

  3. 千呼万唤始出来,微软Power BI简体中文版官网终于上线了,中文文档也全了。。

    前几个月时间,研究微软Power BI技术,由于没有任何文档和资料,只能在英文官网瞎折腾,同时也发布了英文文档的相关文章:系列文章,刚好上周把文章发布完,结果简体中文版上线了.哈哈,心里有苦啊,早知道 ...

  4. 微软.NET Core RC2正式发布,横跨所有平台

    .NET官方博客宣布了<Announcing .NET Core RC2 and .NET Core SDK Preview 1>,正式如期发布了.NET Core RC2, 现在可以放心 ...

  5. 阿里云和微软共同开源的 OAM 对 Kubernetes 开发人员意味着什么?

    上周,微软和阿里巴巴共同推出了开放应用模型(OAM),用于定义部署在任何地方的应用模型的一种规范.Rudr是Microsoft基于Kubernetes环境的OAM标准实现. 我用了一个周末来了解OAM ...

  6. 微软加入字节码联盟,进一步开发支持Blazor 的WebAssembly技术

    字节码联盟 (Bytecode Alliance)宣布已正式成为 501(c)(3) 非营利组织,参与组建的企业/组织包括 Fastly.英特尔.Mozilla 和微软,此外还邀请到了 Arm.DFI ...

  7. 乘风破浪,遇见最美Windows 11之新微软商店(Microsoft Store)生态 - 安卓(Android™)开发体验指南

    什么是Windows 11的安卓(Android)应用 2021年6月25日,微软召开线上发布会,对外宣告下一代Windows操作系统Windows 11,Windows 11为用户重新打造的Micr ...

  8. 微软官网的office外接程序开发

    链接地址:https://msdn.microsoft.com/zh-cn/library/fp161347.aspx

  9. .NET 5 Preview 1的深度解读和跟进

    这几天微软.NET 团队发布了.NET 5 Preview-1, 如约而至.很兴奋,因为.NET Core和.NET Framework终于实现了大一统,同时也很期待,期待.NET 5能给我们带来哪些 ...

随机推荐

  1. 验证Kubernetes YAML的最佳实践和策略

    本文来自Rancher Labs Kubernetes工作负载最常见的定义是YAML格式的文件.使用YAML所面临的挑战之一是,它相当难以表达manifest文件之间的约束或关系. 如果你想检查所有部 ...

  2. Python | 面试的常客,经典的生产消费者模式

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第23篇文章,我们来聊聊关于多线程的一个经典设计模式. 在之前的文章当中我们曾经说道,在多线程并发的场景当中,如果我 ...

  3. Springboot中如何自定义注解以及使用2例

    不说废话,直接进入正题: java自定义注解主要有3步:1.编写@interface接口2.编写@interface对应的处理方法进行处理3.调用处理方法 示例一:判断奇偶:比如有一个字段no要判断奇 ...

  4. 静态集成腾讯TBS X5内核WebView,从微信提取新版30M浏览器内核打包进apk

    目录 前情提要 第一步:下载老版本SDK得到jar 获取SDK 集成SDK 步骤二.下载提取最新TBS X5内核 方法1:从微信中提取 方法2:App内内访问tbs调试页安装新内核 步骤三.集成内核到 ...

  5. Linux Docker部署

    Docker 安装 卸载旧版docker yum remove docker \ docker-client \ docker-client-latest \ docker-common \ dock ...

  6. 2020-04-22:谈谈JDK1.8下的HashMap在并发情况下链表成环的过程。(挖)

    福哥答案2020-04-22: jdk1.8下的hashmap采用的是尾插法,不会有链表成环的问题.jdk1.7下采用的头插***有链表成环的问题. hashmap成环原因的代码出现在transfer ...

  7. 9个常用ES6特性归纳(一般用这些就够了)

    ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应 ...

  8. MIT 6.828 Lab04 : Preemptive Multitasking

    目录 Part A:Multiprocessor Support and Cooperative Multitasking Multiprocessor Support 虚拟内存图 Exercise ...

  9. Dubbo直连方式

    目录 一.dubbo概述 1. 基本架构 2. dubbo 支持的协议 二.直连方法 三.创建服务提供者 1. 思路 1. 创建maven web 2. pom.xml 3. 创建实体 4. 创建服务 ...

  10. openstack vnc 报1006的错误

    1.问题现象 创建完虚拟机以后,通过nova get-vnc-console命令,获取虚机的vnc连接地址,在浏览器中打开该连接,报1006错误 2.vnc的原理图 3.定位分析 1)分别在控制节点和 ...