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

现在都在谈论全场景开发,也就是用一套开发工具,可以开发包括但不限于桌面、移动、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. Java实现邮箱验证码

    前言 相比于java实现短信验证码,邮箱验证码就简单了许多,目前只是简单的利用java发送自定义内容至指定邮箱,等过几天再弄短信和邮箱验证码Web版本的.查询网上资料,得知相比于网易邮箱,QQ邮箱是最 ...

  2. Python的10个神奇的技巧

    尽管从表面上看,Python似乎是任何人都可以学习的一种简单语言,但确实如此,许多人可能惊讶地知道一个人可以熟练掌握该语言. Python是其中的一门很容易学习的东西,但可能很难掌握. 在Python ...

  3. 学会这些Python美图技巧,就等着女朋友夸你吧

    一.前言 Python中有许多用于图像处理的库,像是Pillow,或者是OpenCV.而很多时候感觉学完了这些图像处理模块没有什么用,其实只是你不知道怎么用罢了.今天就给大家带了一些美图技巧,让你的图 ...

  4. Redis服务之Redis5集群相关命令说明

    上一篇博客主要聊了下redis.trib.rb这个工具来管理redis3/4 cluster 中的节点,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13456 ...

  5. Vue Vuex中的严格模式/实例解析/dispatch/commit /state/getters

    严格模式 import getters from './getters' import mutations from './mutations' import actions from './acti ...

  6. 运用sklearn进行主成分分析(PCA)代码实现

    基于sklearn的主成分分析代码实现 一.前言及回顾 二.sklearn的PCA类介绍 三.分类结果区域可视化函数 四.10行代码完成葡萄酒数据集分类 五.完整代码 六.总结 基于sklearn的主 ...

  7. 微信小程序对接通联支付

    1.首先拿到通联支付开发API:https://aipboss.allinpay.com/know/devhelp/main.php?pid=15#mid=92 2.如果注册通联或者企业认证工作请到: ...

  8. c++知识点 2006-10-14 12:59

    这是自己开发一个简易的监控系统时的所用到的知识点. 第一个问题 在网络传输数据时可以传int,float,doule,char,等包括结构体类型但是除类类型外. 在调试中要常用merry寄存器. 应用 ...

  9. 《MySQL必知必会》检索数据,排序检索数据(select ,* ,distinct ,limit , . , order by ,desc)

    <MySQL必知必会>检索数据,排序检索数据 1.检索数据 1.1 select 语句 为了使用SELECT检索表数据,必须至少给出两条信息一想选择什 么,以及从什么地方选择. 1.2 检 ...

  10. Redis设计与实现——多机数据库的实现

    复制 旧版Redis的复制功能分为同步(sync)和命令传播两个操作. sync:是一个非常耗费资源的操作                                           命令传播 ...