.NET Conf 2020于2020年11月10日举行,会上正式发布.NET 5。.NET 5是.NET平台统一的第一个版本。
.NET 5 SDK和Visual Studio 2019 v16.8版本在11月10日已经提供下载,更新Visual Studio 2019 版本至v16.8以支持.NET 5。
此次更新,更新了很多重要功能。包括但不仅限于以下内容:
1、C# 9.0
- 记录
- 仅限 Init 的资源库
- 顶级语句
- 模式匹配增强功能
- 本机大小的整数
- 函数指针
- 禁止发出 localsinit 标志
- 目标类型的新表达式
- 静态匿名函数
- 目标类型的条件表达式
- 协变返回类型
- 扩展 GetEnumerator 支持 foreach 循环
- Lambda 弃元参数
- 本地函数的属性
- 模块初始值设定项
- 分部方法的新功能
2、性能提高
Performance Improvements in .NET 5.0, Arm64 Performance in .NET 5.0, 和 gRPC.
3、.NET自带类库增强
Json序列化、正则表达式和and HTTP (HTTP 1.1, HTTP/2)。
- .NET 5.0对System.Text.Json进行了显着改进,以提高性能,可靠性。https://github.com/dotnet/runtime/issues/41313
- HttpClient类增加了一些扩展方法
- 改进了对不可变类型的支持
- 新增JsonSerializer支持record和fields类型
4、P95延迟减少
由于GC,分层编译和其他方面的改进,P95延迟有所减少。https://docs.microsoft.com/en-us/azure/internet-analyzer/internet-analyzer-scorecard
5、增加对Windows ARM64和WebAssembly的支持
.NET应用程序现在可以在Windows Arm64上本机运行。 这是在.NET Core 3.0中添加的对Linux Arm64的支持(对glibc和musl的支持)。 使用.NET 5.0,您可以在Windows Arm64设备(例如Surface Pro X)上开发和运行应用程序。
WPF和Winform目前还不支持运行在Windows Arm64设备上,需要等待后续更新。
此外,Windows ARM64性能也得到了提升,https://github.com/dotnet/runtime/issues/35853
6、Windows Form设计器增强
在Visual Studio 2019 16.8版本中,Windows Form设计器得到了增强(针对.NET Core 3.1和.NET 5)。
现在已经支持全部Winform的控件以及Telerik Winform控件。
设计器现在已经包括:拖放,选择,移动和调整大小;剪切/复制/粘贴/删除控件,与属性窗口集成,事件生成等功能。 数据绑定和对更广泛的第三方控件的支持将会在后续版本中实现
反正这些在.Net Framework版本中很早就已经有了,这次更新也就不算新鲜事了。
7、TargetFramework已经更新为net5.0
在https://www.cnblogs.com/zhaotianff/p/13440107.html这篇WPF的文章中,可以看到以前的TargetFrameWork是netcoreapp3.1,现在已经是net5.0了
在后续的.NET 6.0版本中,Xamarin项目还能通过TargetFramework来描述操作系统依赖性,定位iOS和Android。
针对桌面项目(WPF、Winform和WinRT),TargetFramework已经被更新为net5.0-windows,还可以指定操作系统版本,如 net5.0-windows7
、net5.0-windows10.0.17763.0
。
这也就意味着在WPF中可以直接引用Winform的类库,不再需要修改.csproj文件。反之亦是如此。
如果需要使用WinRT APIs,就必须指定Windows 10的版本,如net5.0-windows10.0.15063.0(Windows v1703)
如果有跨平台需求,需要注意以下几点:
- net5.0是.NET 5.0的新目标框架(TFM)。
- net5.0结合并替代了netcoreapp和netstandard TFM。(https://docs.microsoft.com/en-us/dotnet/standard/frameworks#supported-target-frameworks)
- net5.0支持.NET Framework兼容模式
- net5.0-windows用于标识使用Windows系统特定的功能(APIs),包括Windows窗体,WPF和WinRT API。
- 在.NET 6.0中将添加net6.0-ios和net6.0-android,默认TFM 是net6.0。
- 特定于操作系统的TFM可以包含操作系统版本号,例如net6.0-ios14。
- 可移植API,如ASP.NET Core将可与net5.0一起使用。 在net6.0中,Xamarin forms也将支持该功能。
说明:
在Visual Studio 2019 16.8/16.8.1版本中,控制台应用程序、WPF、Winform的目标框架仍然是.Net Core 3.1,需要手动修改成.NET 5.0。而ASP.NET项目,默认目标框架已经是.NET 5.0。
8、与WinRT互操作(重大更改)
一个重大更改就是,WinRT APIs现在已经作为.NET 5.0的一部分,现有的WinRT互操作方式已从.NET运行时中删除。 这也就意味着使用了WinRT库函数的.Net Core 3.x应用程序在升级到.NET 5.0时,需要重新构建。
这也就意味着,不再需要手动引用任何组件,导入命名空间就可以直接使用WinRT APIs。
在Windows 8操作系统中,微软推出了WinRT,一种新的运行时。到Windows 10时代,WinRT已经变成UWP,现在又叫回了WinRT,还是那种熟悉的感觉。虽然我不做这方面的开发,但以前读过一本书叫Windows Runtime via C#,当时就觉得WinRT很强。
9、Native Export(原生导出?)
这个功能主要跨平台用,我目前用不到,可访问以下链接获取详细信息https://github.com/AaronRobinsonMSFT/DNNE
10、在Windows上支持(ICU International Components for Unicode)
ICU库用于Unicode和全球化支持,以前仅在Linux和macOS上使用。
这一块我目前用不到
12、单文件应用
单个文件应用程序作为单个文件发布和部署。 该应用程序及其依赖项都包含在该文件中。 当应用程序运行时,依赖项直接从该文件加载到内存中。
这个功能目前主要是针对 Linux的。这功能挺好的,坐等支持Windows。
关于.NET 5的详细介绍,可以访问以下链接: