dotNET 6 Pv 2 发布,支持移动端,多平台开发
bigegpt 2024-09-22 00:40 4 浏览
上周微软开发团队发布发布.NET 6 Preview2。该版本引入了全新的API,运行时性能的改进以及.NET MAUI的早期构建以及对Apple Silicon的构建。
官方下载页面已经提供适用于Windows,macOS和Linux的二进制安装包、容器镜像、Linux发行包,可供下载尝鲜。
官方表示.NET 6已通过在Visual Studio 16.9和Visual Studio for Mac 8.9测试通过,建议使用这些版本试用。
支持
.NET 6正式版本将于2021年11月发布,并且有长达三年的长期支持(LTS)版本支持 。与.NET 5相比,各方面已得到显著扩展,新增加对安卓、iOS、Mac和Mac Catalyst,用于x64和Apple Silicon(又称“ M1”)以及Windows Arm64(特别是Windows桌面)的支持。
.NET 6 以大家对容器的支持,.NET 6 Debian容器镜像(基于 Debian 11,“bullseye)也正在测试中。
改善.NET内部循环性能
对于所有.NET版本,性能都是最重要的。 在过去的几个版本中,为提高吞吐量,减少内存消耗以及其他影响应用程序稳态性能的因素付出了很多努力。.NET 6,将重点放在两个方面,其中一些方面是.NET 6主题之一的一部分: 提高.NET开发人员的内循环性能 ,希望确保开发人员能够尽可能提高工作效率,优化经常在其内部循环中使用的工具和工作流程。 。
.NET 6另一个是.NET热装载。通过允许在运行应用程序时甚至在未连接调试器的情况下对代码进行编辑,热装载将在所有受支持的操作系统和硬件平台上提高开发人员的生产率。想要对应用程序或服务进行更改时,无需停止它并经历典型的内部循环周期,即进行更改,构建,运行并回到触发需求的应用程序或服务中对于最初的更改,可以跳过整个周期进行多种编辑。该功能涉及的工作跨越.NET版本,需要在运行时(coreclr和mono)上,C# Roslyn编译器,应用程序模型(例如Blazor,.NET MAUI)和开发人员工具(例如CLI,Visual Studio),但有望从根本上改善.NET开发人员编写其应用和服务的方式。
移动和多平台应用APP开发
.NET 6最令人兴奋的部分之一是移动开发,目前作为单独的Xamarin产品提供。在.NET 6中,iOS,Android和macOS开发将集成到.NET SDK体验中,并使用.NET库。Mono也将打包到.NET中,开发人员可以利用两个运行时优势,而不必考虑不同的.NET版本,也不必担心兼容性问题。
.NET 6中所有的.NET应用程序都将在相同的库上运行。Xamarin的跨平台UI框架Xamarin.Forms演变成.NET MAUI多平台应用程序UI,使用户可以使用一套代码库轻松适配iOS,Android,Windows和macOS APP。.NET MAUI作为.NET 6的一部分提供,同时还进行了一系列性能和工具改进,例如.NET/C# Hot Reload,跨不同平台的更多共享资源和代码,以及具有一组更灵活的UI控件的更好的页面呈现性能。
.NET MAUI不仅适用于客户端应用程序开发人员。得益于重构的控件集以及可以在.NET 6库上运行的功能,现有的Blazor应用程序可以通过.NET MAUI在Windows和macOS上本地运行。能够与Blazor代码库无缝地结合本机控件和功能,包括特定于平台的功能。
对于打包,部署和发布的跨平台客户端应用程序。由于开发应用程序的开发人员/目标平台/方式太多,开发者需要分发许多不同的应用程序包。.NET推出了改善本地和云中发行和版本控制的策略,桌面开发人员可以将其应用程序打包、分发、发布和更新到多个桌面平台和体系结构。在.NET 6中,将能够:
使用.NET库构建iOS,Android和macOS应用程序。
用.NET MAUI在相同的代码库中创建iOS,Android,Windows和macOS应用程序。
跨平台共享更多代码和资源(例如图像,应用程序图标/清单等)。
在macOS和Windows上本地运行Blazor Web应用程序。
轻松打包和分发包含的所有目标框架的应用程序。
多平台APP用户界面
.NET 6添加了.NET MAUI和针对Android,iOS和Mac Catalyst的单个项目开发人员的经验。
Mac Catalyst
可以使用Mac Catalyst 将以下TargetFramework设置添加到项目中,进行macOS桌面进行构建
<TargetFrameworks>net6.0-android;net6.0-ios</TargetFrameworks>
<TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">$(TargetFrameworks);net6.0-maccatalyst</TargetFrameworks>
多目标的应用程序项目
.NET MAUI应用程序已经有了单个项目体验。用户可以获得可以在Android,iOS和macOS上运行的非常干净的解决方案。Windows支持取决于WinUI 3,它现在已在其预览版中。目前需要从命令行进行构建和运行。Visual Studio的未来版本将添加设备选择和运行选项。
共享的字体,图像和应用程序图标
字体和图像可以放置在解决方案中的一个位置,.NET MAUI可以使它们在目标平台上本地运行。 在项目的*.csproj文件中以 SharedImage 和 SharedFont定义:
<ItemGroup>
<SharedImage Include="appicon.svg" ForegroundFile="appiconfg.svg" IsAppIcon="true" />
<SharedFont Include="Resources\Fonts\ionicons.ttf" />
</ItemGroup>
两者都接受通配符以包含一个位置中的所有文件。
<ItemGroup>
<SharedImage Include="appicon.svg" ForegroundFile="appiconfg.svg" IsAppIcon="true" />
<SharedImage Include="Resources\Images*" />
<SharedFont Include="Resources\Fonts*" />
</ItemGroup>
MauiApp与Host Builder共同引导应用程序
新增用于配置服务,字体和兼容性渲染器以扩展Xamarin.Forms项目迁移的扩展。 IWindow已在将来的版本中引入了多窗口支持。新模式还为库作者和控件供应商提供了一个统一的地方,可与.NET MAUI集成。
public class Application : MauiApp
{
public override IAppHostBuilder CreateBuilder() =>
base.CreateBuilder()
.RegisterCompatibilityRenderers()
.ConfigureServices((ctx, services) =>
{
services.AddTransient<MainPage>();
services.AddTransient<IWindow, MainWindow>();
})
.ConfigureFonts((hostingContext, fonts) =>
{
fonts.AddFont("ionicons.ttf", "IonIcons");
});
public override IWindow CreateWindow(IActivationState state)
{
Microsoft.Maui.Controls.Compatibility.Forms.Init(state);
return Services.GetService<IWindow>();
}
}
新的控制处理程序
实现新处理程序方法的第一个控件和属性。这些包括Button,Label和Entry,Slider和Switch的部分实现。下面的 HelloMaui示例应用程序,支持从单一项目的MacOS,iOS版和Android运行:
移动SDK的更新
在新版本中,移动SDK和周围的工具也正在不断增加中。这些功能将与将来的Visual Studio发行版集成在一起,并将继续得到改进。
安卓:
Android X库现已可用于.NET 6,并且是Android应用程序的默认依赖项
iOS:
Windows上的开发人员可以使用远程iOS模拟器
Windows上的开发人员可以连接到远程Mac构建主机
提前编译已添加,可用于构建和部署到物理iOS硬件
.NET库
.NET库中已添加了以下API和改进。
System.Text.Json–ReferenceHandler.IgnoreCycles
JsonSerializer(System.Text.Json) 现在支持序列化对象图时忽略循环功能 。 这 ReferenceHandler.IgnoreCycles 选项具有与Newtonsoft.Json相似的行为 ReferenceLoopHandling.Ignore。 一个主要区别是System.Text.Json实现将引用循环替换为 null JSON令牌,而不是忽略对象引用。
以下示例中展示了ReferenceHandler.IgnoreCycles行为,在这种情况下, Next 属性序列化为null,以避免形成一个死循环。
class Node
{
public string Description { get; set; }
public object Next { get; set; }
}
void Test()
{
var node = new Node { Description = "Node 1" };
node.Next = node;
var opts = new JsonSerializerOptions { ReferenceHandler = ReferenceHandler.IgnoreCycles };
string json = JsonSerializer.Serialize(node, opts);
Console.WriteLine(json); // Prints {"Description":"Node 1","Next":null}
}
PriorityQueue
PriorityQueue<TElement, TPriority>(System.Collections.Generic)是一个新集合,可以添加具有值和优先级的新项目。出队时,PriorityQueue返回具有最低优先级值的元素。可以认为这个新收藏类似于 Queue<T> 但是每个入队元素的优先级值都会影响出队行为。
下面的示例演示PriorityQueue<string, int>行为:
var pq = new PriorityQueue<string, int>();
pq.Enqueue("A", 3);
pq.Enqueue("B", 1);
pq.Enqueue("C", 2);
pq.Enqueue("D", 3);
pq.Dequeue(); // returns "B"
pq.Dequeue(); // returns "C"
pq.Dequeue(); // either "A" or "D", stability is not guaranteed.
更好地解析标准数字格式
新改进了标准数字类型的解析器,特别是针对.ToString 和.TryFormat。当指定精度> 99个小数位时,它们将提供更好的结果。而且,解析器现在可以更好地支持 Parse方法。
32.ToString("C100") -> C132
.NET 6: $32.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
.NET 5: We had an artificial limitation in the formatting code to only handle a precision of <= 99.
32.ToString("H99") -> throw a FormatException
.NET 6: throws a FormatException
32.ToString("H100") -> H132
.NET 6: throw a FormatException
.NET 5: H is an invalid format specifier. So, we should’ve thrown a FormatException. Instead, our incorrect behavior of interpreting precision >= 100 as custom formats meant we returned wrong values.
double.Parse("9007199254740997.0") -> 9007199254740998
.NET 6: 9007199254740996.
.NET 5: 9007199254740997.0 is not exactly representable in the IEEE 754 format.
SignalR 可空注释
在 ASP.NET核心SignalR客户端 软件包已被 注释为可空属性 。当C#编译器将提供适当的反馈启用nullability时 基于SignalR API中对null的处理方式。
可空是.NET Core 3.x和.NET 5发行版的重点。所有.NET库(也称为“基类库”)都作为这些发行版的一部分进行了注释。
运行时
.NET运行时已进行了以下改进(或与之相关)。
框架程序集使用Crossgen2进行编译
所有.NET库都使用crossgen 2编译跨所有受支持的操作系统和体系结构进行。 包括 Microsoft.NETCore.App目录,例如ASP.NET或Windows Desktop。这些框架将在Preview 3和/或4中过渡到crossgen 2。
Crossgen 2的目的是启用新的性能功能,例如 PGO。Crossgen 2基于一些针对性的大小优化提供了适度的磁盘上大小改进,如下面的比较所示。要点是转移到Crossgen 2不会引起任何前期回归。
Size [MB] FullName
--------- --------
64.22 C:Program FilesdotnetsharedMicrosoft.NETCore.App5.0.3
63.31 C:Program FilesdotnetsharedMicrosoft.NETCore.App6.0.0-preview.1.21102.12
63.00 C:Program FilesdotnetsharedMicrosoft.NETCore.App6.0.0-preview.2.21118.6
配置文件引导的优化
概要文件引导的优化使用户能够生成基于各种特征而最佳的代码。目前正在构建静态和动态PGO 变体。 在预览2中进行了以下改进:
允许间接支持CSE和提升vtable查找;
分层编译中的块计数;
允许内联配置文件按比例放大;
有效的配置方案(例如,具有有效边缘检测功能的生成树);
JIT改进
为了优化JIT生成的代码,进行了以下改进。
不非对其clone循环;
MultiplyHigh intrinsics功能;
第二项改进特定于Arm64。将继续 提高JIT为Arm64生成的代码的性能。
- 上一篇:JavaScript原型之路
- 下一篇:c#将两个datatable合并到一起的方法
相关推荐
- pyproject.toml到底是什么东西?(py trim)
-
最近,在Twitter上有一个Python项目的维护者,他的项目因为构建失败而出现了一些bug(这个特别的项目不提供wheel,只提供sdist)。最终,发现这个bug是由于这个项目使用了一个pypr...
- BDP服务平台SDK for Python3发布(bdp数据平台)
-
下载地址https://github.com/imysm/opends-sdk-python3.git说明最近在开发和bdp平台有关的项目,用到了bdp的python的sdk,但是官方是基于p...
- Python-for-Android (p4a):(python-for-android p4a windows)
-
一、Python-for-Android(p4a)简介Python-for-Android(p4a),一个强大的开发工具,能够将你的Python应用程序打包成可在Android设备上运行...
- Qt for Python—Qt Designer 概览
-
前言本系列第三篇文章(QtforPython学习笔记—应用程序初探)、第四篇文章(QtforPython学习笔记—应用程序再探)中均是使用纯代码方式来开发PySide6GUI应用程序...
- Python:判断质数(jmu-python-判断质数)
-
#Python:判断质数defisPrime(n):foriinrange(2,n):ifn%i==0:return0re...
- 为什么那么多人讨厌Python(为什么python这么难)
-
Python那么棒,为什么那么多人讨厌它呢?我整理了一下,主要有这些原因:用缩进替代大括号许多人抱怨Python完全依赖于缩进来创建代码块,代码多一点就很难看到函数在哪里结束,那么你就需要把一个函数拆...
- 一文了解 Python 中带有 else 的循环语句 for-else/while-else
-
在本文中,我们将向您介绍如何在python中使用带有else的for/while循环语句。可能许多人对循环和else一起使用感到困惑,因为在if-else选择结构中else正常...
- python的numpy向量化语句为什么会比for快?
-
我们先来看看,python之类语言的for循环,和其它语言相比,额外付出了什么。我们知道,python是解释执行的。举例来说,执行x=1234+5678,对编译型语言,是从内存读入两个shor...
- 开眼界!Python遍历文件可以这样做
-
来源:【公众号】Python技术Python对于文件夹或者文件的遍历一般有两种操作方法,一种是至二级利用其封装好的walk方法操作:import osfor root,d...
- 告别简单format()!Python Formatter类让你的代码更专业
-
Python中Formatter类是string模块中的一个重要类,它实现了Python字符串格式化的底层机制,允许开发者创建自定义的格式化行为。通过深入理解Formatter类的工作原理和使用方法,...
- python学习——038如何将for循环改写成列表推导式
-
在Python里,列表推导式是一种能够简洁生成列表的表达式,可用于替换普通的for循环。下面是列表推导式的基本语法和常见应用场景。基本语法result=[]foriteminite...
- 详谈for循环和while循环的区别(for循环语句与while循环语句有什么区别)
-
初九,潜龙勿用在刚开始使用python循环语句时,经常会遇到for循环和while循环的混用,不清楚该如何选择;今天就对这2个循环语句做深入的分析,让大家更好地了解这2个循环语句以方便后续学习的加深。...
- Python编程基础:循环结构for和while
-
Python中的循环结构包括两个,一是遍历循环(for循环),一是条件循环(while循环)。遍历循环遍历循环(for循环)会挨个访问序列或可迭代对象的元素,并执行里面的代码块。foriinra...
- 学习编程第154天 python编程 for循环输出菱形图
-
今天学习的是刘金玉老师零基础Python教程第38期,主要内容是python编程for循环输出菱形※。(一)利用for循环输出菱形形状的*号图形1.思路:将菱形分解为上下两个部分三角形图案,分别利用...
- python 10个堪称完美的for循环实践
-
在Python中,for循环的高效使用能显著提升代码性能和可读性。以下是10个堪称完美的for循环实践,涵盖数据处理、算法优化和Pythonic编程风格:1.遍历列表同时获取索引(enumerate...
- 一周热门
- 最近发表
-
- pyproject.toml到底是什么东西?(py trim)
- BDP服务平台SDK for Python3发布(bdp数据平台)
- Python-for-Android (p4a):(python-for-android p4a windows)
- Qt for Python—Qt Designer 概览
- Python:判断质数(jmu-python-判断质数)
- 为什么那么多人讨厌Python(为什么python这么难)
- 一文了解 Python 中带有 else 的循环语句 for-else/while-else
- python的numpy向量化语句为什么会比for快?
- 开眼界!Python遍历文件可以这样做
- 告别简单format()!Python Formatter类让你的代码更专业
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- libcrypto.so (74)
- linux安装minio (74)
- ubuntuunzip (67)
- vscode使用技巧 (83)
- secure-file-priv (67)
- vue阻止冒泡 (67)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)