dotNET 6 Pv 2 发布,支持移动端,多平台开发


上周微软开发团队发布发布.NET 6 Preview2。该版本引入了全新的API,运行时性能的改进以及.NET MAUI的早期构建以及对Apple Silicon的构建。

官方下载页面已经提供适用于Windows,macOS和Linux的二进制安装包、容器镜像、Linux发行包,可供下载尝鲜。

dotNET 6 Pv 2 发布,支持移动端,多平台开发

官方表示.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内部循环性能

dotNET 6 Pv 2 发布,支持移动端,多平台开发

对于所有.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版本,也不必担心兼容性问题。


dotNET 6 Pv 2 发布,支持移动端,多平台开发


.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桌面进行构建

net6.0-android;net6.0-ios
$(TargetFrameworks);net6.0-maccatalyst

多目标的应用程序项目

.NET MAUI应用程序已经有了单个项目体验。用户可以获得可以在Android,iOS和macOS上运行的非常干净的解决方案。Windows支持取决于WinUI 3,它现在已在其预览版中。目前需要从命令行进行构建和运行。Visual Studio的未来版本将添加设备选择和运行选项。

dotNET 6 Pv 2 发布,支持移动端,多平台开发

共享的字体,图像和应用程序图标

字体和图像可以放置在解决方案中的一个位置,.NET MAUI可以使它们在目标平台上本地运行。 在项目的*.csproj文件中以 SharedImage 和 SharedFont定义:




两者都接受通配符以包含一个位置中的所有文件。





MauiApp与Host Builder共同引导应用程序

新增用于配置服务,字体和兼容性渲染器以扩展Xamarin.Forms项目迁移的扩展。 IWindow已在将来的版本中引入了多窗口支持。新模式还为库作者和控件供应商提供了一个统一的地方,可与.NET MAUI集成。

public class Application : MauiApp
{
public override IAppHostBuilder CreateBuilder() =>
base.CreateBuilder()
.RegisterCompatibilityRenderers()
.ConfigureServices((ctx, services) =>
{
services.AddTransient();
services.AddTransient();
})
.ConfigureFonts((hostingContext, fonts) =>
{
fonts.AddFont("ionicons.ttf", "IonIcons");
});
public override IWindow CreateWindow(IActivationState state)
{
Microsoft.Maui.Controls.Compatibility.Forms.Init(state);
return Services.GetService();
}
}

新的控制处理程序

实现新处理程序方法的第一个控件和属性。这些包括Button,Label和Entry,Slider和Switch的部分实现。下面的 HelloMaui示例应用程序,支持从单一项目的MacOS,iOS版和Android运行:

dotNET 6 Pv 2 发布,支持移动端,多平台开发

移动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(System.Collections.Generic)是一个新集合,可以添加具有值和优先级的新项目。出队时,PriorityQueue返回具有最低优先级值的元素。可以认为这个新收藏类似于 Queue 但是每个入队元素的优先级值都会影响出队行为。

下面的示例演示PriorityQueue行为:

var pq = new PriorityQueue();
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生成的代码的性能。

展开阅读全文

页面更新:2024-03-14

标签:平台   优先级   示例   注释   控件   应用程序   框架   桌面   性能   目标   版本   代码   功能   工具   项目   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top