隆重宣布:.NET 8 RC1 现已推出

news2024/11/16 12:47:19

作者:Leslie Richardson
排版:Alan Wang

.NET 8 RC1 现已推出。这是我们两个候选版本中的第一个。此版本包括适用于 Android 和 WASM 的新 AOT 模式、System.Text.Json 改进以及对容器的 Azure Managed Identity 支持。如果您还没有开始学习和测试 .NET 8,那么现在正是好时机。

.NET Conf 2023的日期已公布!请加入我们,一起庆祝2023 年 11 月 14 日至 16 日举行的 .NET 8 发布会!

请下载适用于 Linux、macOS 和 Windows 的 .NET 8 RC1。

  • 安装程序和二进制文件
  • 容器镜像
  • 发行说明
  • 重大更改
  • 已知的问题
  • GitHub 问题跟踪器

您还可以查看几篇令人兴奋的帖子:

  • .NET 8 RC1 中的 ASP.NET Core 更新
  • .NET 8 RC1 中的 .NET MAUI 更新
  • Visual Studio 2022 17.8 Preview 2
  • .NET 8 RC1 中的 Entity Framework 更新
  • .NET 8 的新增功能描述了 .NET 8 中的所有新功能。如果想要更全面的了解这个平台,请阅读为什么选择 .NET?

System.Text.Json 改进

IAsyncEnumerable 的 System.Net.Http.Json 扩展

https://github.com/dotnet/runtime/pull/89258

RC1 中包含了 IAsyncEnumerable 流式反序列化扩展方法:

const string RequestUri = "https://api.contoso.com/books";
using var client = new HttpClient();
IAsyncEnumerable<Book> books = await client.GetFromJsonAsAsyncEnumerable<Book>(RequestUri);

await foreach (Book book in books)
{
    Console.WriteLine($"Read book '{book.title}'");
}

public record Book(int id, string title, string author, int publishedYear);

感谢 @IEvangelist 对此(IAsyncEnumerable 的 System.Net.Http.Json 扩展)提供的实现方法。

JsonContent.Create 重载接受 JsonTypeInfo

https://github.com/dotnet/runtime/pull/89614

现在可以使用修剪安全/源生成的合约创建 JsonContent 实例:

var book = new Book(id: 42, "Title", "Author", publishedYear: 2023);
HttpContent content = JsonContent.Create(book, MyContext.Default.Book);

public record Book(int id, string title, string author, int publishedYear);

[JsonSerializable(typeof(Book))]
public partial class MyContext : JsonSerializerContext 
{ }

感谢 @brantburnett 对此(JsonContent.Create 重载接受 JsonTypeInfo)提供的实现方法。

JsonNode.ParseAsync APIs

https://github.com/dotnet/runtime/pull/90006

添加对从流中解析 JsonNode 实例的支持:

using var stream = File.OpenRead("myFile.json");
JsonNode node = await JsonNode.ParseAsync(stream);

感谢 @DoctorKrolic 对此(JsonNode.ParseAsync APIs)提供的实现方法。

JsonSerializerOptions.MakeReadOnly(bool populateMissingResolver)

https://github.com/dotnet/runtime/pull/90013

现有的无参数 JsonSerializerOptions.MakeReadOnly() 方法是基于修剪安全而设计的,因此在 options 实例没有配置解析器的情况下将抛出异常。

调用新的重载

options.MakeReadOnly(populateMissingResolver: true);

如果缺少反射解析器,将使用默认反射解析器填充 options 实例。这模拟了接受 JsonSerializerOptionsJsonSerializer 方法所采用的初始化逻辑。该行为的副作用是新重载被标记为 RequiresUnreferenceCode/RequiresDynamicCode,因此不适合 Native AOT 应用程序。

Android 上的 AndroidStripILAfterAOT 模式

https://github.com/xamarin/xamarin-android/pull/8172

我们尝试为开箱即用的 .NET 和 .NET MAUI 应用程序选择最佳的默认配置。具体来说,在 .NET 6 及更高版本中,当这些应用程序在 Release 模式下构建时,默认情况下使用提前预编译的(AOT)编译模式。AOT 编译在启动时间和运行时性能方面带来了更快的性能,但会以应用程序大小增加为代价。提前预编译只 AOT 编译应用程序的启动路径的一部分 ,从而缩短了启动时间,而应用程序尺寸只增加了很小的一部分。新的 AndroidStripILAfterAOT 设置会删除经过 AOT 编译的未使用的 IL,从而将 dotnet 模板应用程序的 apk 大小至少减小 0 – 3.5%。

何时考虑使用 AndroidStripILAfterAOT

如果您更关心 Android 应用程序的性能,而不是应用程序的大小,那么 AOT 编译所有代码是实现最佳启动和运行时性能的好方法。$(AndroidStripILAfterAOT) 进一步删除了未使用的 IL,使 AOT 编译带来的应用程序大小的增加更加合理。删除的 IL 也将不再存在,从而使对应用程序的 .NET 代码进行逆向工程变得更加困难(但并非不可能)。

如何使用 AndroidStripILAfterAOT

请为您的 Android 应用程序设置以下 MsBuild 属性:

<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
  <AndroidStripILAfterAOT>true</AndroidStripILAfterAOT>
</PropertyGroup>

默认情况下,将 AndroidStripILAfterAOT 设置为 true 将覆盖默认 AndroidEnableProfiledAot 设置,从而允许删除所有可修剪的 AOT 方法。通过显式设置,可以将提前预编译和 IL 剥离一起使用:

<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
  <AndroidStripILAfterAOT>true</AndroidStripILAfterAOT>
  <AndroidEnableProfiledAot>true</AndroidEnableProfiledAot>
</PropertyGroup>

dotnet 创建新的 Android 应用程序的 .apk 大小结果:

$(AndroidStripILAfterAOT)$(AndroidEnableProfiledAot).apk 尺寸
truetrue7.7MB
falsetrue7.7MB
truefalse8.1MB
falsefalse8.1MB
请注意,$(AndroidStripILAfterAOT)=false 和 $(AndroidEnableProfiledAot)=true 是默认的 Release 配置环境,生成的 apk 大小为 7.7MB。

限制

并非所有经过 AOT 编译的方法都可以删除。在运行时,有多种场景需要我们从 AOT 切换到 JIT 才能产生正确的结果。尽管如此,我们将在即将发布的 .NET 9 版本中不断努力缩小这些差距。

最后说明

我们诚邀大家尝试这项新功能,并提交任何发现的问题,以帮助我们进一步改善用户体验。问题可以直接提交到 dotnet/runtime 存储库。

配置绑定生成器的重大更改

配置绑定生成器已切换为使用编译器拦截器预览功能来发出绑定逻辑 –
https://github.com/dotnet/runtime/pull/90835。

在非 Web SDK 场景中(即需要 Microsoft.Extensions.Configuration.Binder 包引用进行绑定的应用程序,例如控制台应用程序),现在需要以下附加的 MSBuild 属性来启用生成器:

<PropertyGroup>
  <EnableConfigurationBindingGenerator>true</EnableConfigurationBindingGenerator>
+ <Features>$(Features);InterceptorsPreview</Features>
</PropertyGroup>

这是暂时的。在 RC-2 中,启用生成器将改回仅需要一个手势就可以进行切换。编译器接收器功能将以可靠的方式隐式启用。

<PropertyGroup>
  <EnableConfigurationBindingGenerator>true</EnableConfigurationBindingGenerator>
- <Features>$(Features);InterceptorsPreview</Features>
</PropertyGroup>

容器切换到非预览标签模式

问题:https://github.com/dotnet/dotnet-docker/issues/4772
PR:https://github.com/dotnet/dotnet-docker/pull/4817

为了准备 .NET 8 的正式版本,.NET 容器映像已切换到 RC 1 的新标签模式,并从标签名称中删除“preview”。

在之前的 .NET 8 的预览版本中,浮动标签以 8.0-preview8.0-preview-<OS> 的名称发布。从 RC 1 版本开始,这些将不再被维护。相反,您应该将标签引用迁移到 8.08.0-<OS>。进行此更改将允许在 .NET 8 正式 版本上实现无缝过渡,因为这些将成为在 .NET 8 的整个生命周期中维护的永久标签。

在非 Windows 上使用 Win32 资源跨平台构建 Windows 应用程序

问题:https://github.com/dotnet/runtime/issues/3828
PR: https://github.com/dotnet/runtime/pull/89303
非常感谢 @anatawa12 做出的的巨大贡献!

在非 Windows 平台上构建面向 Windows 的应用程序时,生成的可执行文件现在会使用任何指定的 Win32 资源进行更新,例如应用程序图标、清单、版本信息。

在以前,应用程序必须在 Windows 上构建才能拥有此类资源。修复跨平台支持一直是一个呼声很大的请求,因为它是影响基础设施复杂性和资源使用的一个重大痛点。

SDK:Container 发布现在支持 Azure Managed Identity

  • 使用 Managed Identity 时 Azure Container Registry 身份验证失败

SDK Container 发布功能是一种将 .NET 应用程序打包到容器中并将其推送到容器注册表(例如 Docker Hub、Azure Container Registry 或其他流行注册表)的简单方法。 推送到这些远程注册表通常需要身份验证,这通常由 docker login 命令处理。有些注册表(例如 Azure Container Registry)不使用标准用户名/密码设置,而是依赖于 OAuth 令牌交换。SDK Container 发布工具不知道如何处理此令牌交换,所以在 Azure Container Registry上使用 Managed Identity(或使用任何其他使用身份令牌交换的注册表)的用户在推送其容器时会遇到身份验证错误。 在 .NET 8.0.100 RC1 中,我们很高兴地宣布,我们现在支持 OAuth 令牌交换身份验证方法,因此 ACR 和使用它的所有其他注册表现在都可以正常工作。典型的发布流程如下所示:

> az acr login -n <your registry name>
> dotnet publish -r linux-x64 -p PublishProfile=DefaultContainer

没有比这更简单的了!您可以在我们的文档中了解有关注册表身份验证的更多信息,并且还可以了解如何开始容器化您的应用程序。

WASM 上的 WasmStripILAfterAOT 模式

https://github.com/dotnet/runtime/pull/88926

Blazor WebAssembly 和 WASM Browser支持提前 (AOT) 编译,您可以将 .NET 代码直接编译到 WebAssembly 中。AOT 编译以更大的应用程序体积为代价,提高了运行时性能。根据我们在上述 GitHub 问题中提到的测试,这种新的剥离模式将 _framework 文件夹的大小减少了 1.7% – 4.2%。

何时考虑使用 WasmStripILAfterAOT

每当您启用 AOT 编译时,此功能都是理想的选择,因此请在较小的应用程序中尝试一下!

如何使用 WasmStripILAfterAOT:

请为您的 Blazor WebAssembly 或 WASM Browser 应用程序设置以下 MsBuild 属性:

<PropertyGroup>
  <RunAOTCompilation>true</RunAOTCompilation>
  <WasmStripILAfterAOT>true</WasmStripILAfterAOT>
</PropertyGroup>

它将删除大多数已编译方法的 IL 代码,包括库中的方法和应用程序开发人员编写的方法。

限制:

并非所有编译方法都是可修剪的。在运行时,有很多场景我们必须从 AOT 切换到解释器才能产生正确的结果。尽管如此,我们将会继续努力在即将发布的 .NET9 版本中缩小这个差距。

最后说明

我们诚邀大家尝试这项新功能,并提交任何发现的问题,以帮助我们进一步改善用户体验。问题可以直接提交到 dotnet/runtime 存储库。

RDP 中的 WPF 硬件加速

https://github.com/dotnet/wpf/pull/7684

在过去,所有远程访问的 WPF 应用程序都必须使用软件渲染,即使系统具有硬件渲染功能。我们添加了一个新选项,允许应用程序开发人员能够利用 AppContext 开关选择加入 RDP 硬件加速。

硬件加速是指使用计算机的图形处理单元(GPU)来加速应用程序中图形和视觉效果的渲染。这可以提高性能并提供更无缝、响应更快的图形。相比之下,软件渲染仅依靠计算机的中央处理单元 (CPU) 来渲染图形,速度较慢且效率较低。

如何在 RDP 中为 WPF 应用程序启用硬件加速?

我们提供在 RDP 中启用硬件加速的两种方法:

  1. 通过在 *.csproj 文件中添加 RuntimeHostConfigurationOption,如下所示:
<ItemGroup>
      <RuntimeHostConfigurationOption Include="Switch.System.Windows.Media.EnableHardwareAccelerationInRdp" Value="true" />
</ItemGroup>
  1. 通过在 *.runtimeconfig.json 文件中添加 configProperty,如下所示:
  "configProperties": {
      "Switch.System.Windows.Media.EnableHardwareAccelerationInRdp": true
    } 

最后说明

我们诚邀大家尝试这项新功能,并提交发现的任何问题,以帮助我们进一步改善用户体验。问题可以直接提交到 dotnet/wpf 存储库。

社区贡献者

本月的社区贡献者是 Jakub Majocha。
在这里插入图片描述
我是 Jakub Majocha。我住在波兰克拉科夫,在那里我从事与软件无关的工作。我对计算机编程有着持久的兴趣,但我的经验仅限于小型一次性脚本、一些供内部使用和解决编程难题的工具,例如 Advent Of Code。我喜欢摆弄代码,并且我发现 F# 非常适合这样做。

事实上,我可以加入并为 F# 做出贡献,这表明社区是多么包容。这也归功于语言本身。F# 凭借其类型推断、简洁的语法和简单的仪式,允许快速实验、重构和尝试。对我来说这只是有趣和放松的事情。

总结

随着 11 月份最终版本的临近,我们的团队已经转向质量和完善工作。现在是报告您在 RC1 和早期版本中发现的任何问题的好时机。我们也很想听听您对使用这些功能的反馈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1077318.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java+SpringBoot+Vue民宿管理系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

android Google官网 :支持不同的语言和文化 rtl / ltr : 本地化适配:RTL(right-to-left) 适配

参考 google官网&#xff1a; 支持不同的语言和文化 应用包含可能专门针对特定文化而设计的资源。例如&#xff0c;应用可以包含针对特定文化的字符串&#xff0c;这些字符串将转换为当前语言区域的语言。 将具有文化特异性的资源与应用的其他资源分开是一种很好的做法。And…

Apache Doris 数据建模之 Aggregate Key 模型

了解 Doris 数据模型对于我们使用 Doris 来解决我们业务问题非常重要&#xff0c;这个系列我们将详细介绍 Doris 的三种数据模型及 Doris 数据分区分桶的一些策略&#xff0c;帮助用户更好的使用 Doris 。 这个系列我会讲解 Doris 的三种数据模型及在这三种数据模型之上的 Rol…

算法练习11——买卖股票的最佳时机 II

122. 买卖股票的最佳时机 II 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。 返回 你能获得…

【移植代码】matlab.engine报错、numpy+mkl安装、Qt platform plugin报错总结

文章目录 numpy报错numpy安装PyQt5报错matlab.engine无法加载确认配置版本进行配置 matlab文件路径缺失vscode无法debug3.7以下版本总结 今天的任务是复现师姐的代码&#xff0c;代码在服务器的环境下可以跑&#xff0c;而我要做的&#xff0c;就是将环境和源码配置好&#xff…

Python库学习(九):Numpy[续篇三]:数组运算

NumPy是用于数值计算的强大工具&#xff0c;提供了许多数组运算和数学函数&#xff0c;允许你执行各种操作&#xff0c;包括基本运算、统计计算、线性代数、元素级操作等 1.基本运算 1.1 四则运算 NumPy数组支持基本的四则运算&#xff08;加法、减法、乘法和除法&#xff09;…

mysql面试题31:一条SQL语句在MySQL中如何执行的

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:一条SQL语句在MySQL中如何执行的 以下是一条SQL语句在MySQL中的详细执行步骤: 语法分析:MySQL首先对SQL语句进行语法分析,检查SQL语句是否符合…

算法题:分发饼干(典型的贪心算法问题)

这个题目是一个典型的贪心算法问题&#xff0c;解决思路是排序双指针贪心法&#xff0c;先将两个数组分别排序&#xff0c;优先满足最小胃口的孩子。&#xff08;本题完整题目附在了最后面&#xff09; 代码如下&#xff1a; class Solution(object):def findContentChildren(…

如何使用 ONLYOFFICE API 转换办公文档格式

作者&#xff1a;天哥 上一期我们介绍了 ONLYOFFICE 的文档生成器API接口函数库。这一期我们继续介绍ONLYOFFICE 的文件转换API接口函数库。 为什么要使用 ONLYOFFICE 转换API ONLYOFFICE 转换 API 有助于转换大部分类型的Office文档&#xff1a;文本、表格、幻灯片、表单、P…

Visual Studio 2022新建项目时没有ASP.NET项目

一、Visual Studio 2022新建项目时没有ASP.NET项目 1、打开VS开发工具&#xff0c;选择工具菜单&#xff0c;点击“获取工具和功能” 2、选择“ASP.NET和Web开发”和把其他项目模板&#xff08;早期版本&#xff09;勾选上安装即可

C/C++实现简单高并发http服务器

基础知识 html&#xff0c;全称为html markup language&#xff0c;超文本标记语言。 http&#xff0c;全称hyper text transfer protocol&#xff0c;超文本传输协议。用于从万维网&#xff08;WWW&#xff1a;World Wide Web&#xff09;服务器传输超文本到本地浏览器的传送…

网络安全(黑客)—小白自学

前言 一、什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防…

什么牌子洗地机最好最实用?口碑最好的洗地机排名

洗地机具备吸拖扫洗一体的特点&#xff0c;专治各种懒病&#xff0c;面对众多的洗地机&#xff0c;对于一些新手来说一时之间无从选择&#xff0c;今天笔者给大家介绍几款近期口碑比较好的家用洗地机。 洗地机洗地机合适的人群&#xff1a; 家里有小宝宝&#xff1a;一般2-10…

前端js八股文大全

一、js的数据类型 值类型(基本类型)&#xff1a;数字(Number)、字符串&#xff08;String&#xff09;、布尔(Boolean)、对空&#xff08;Null&#xff09;、未定义&#xff08;Undefined&#xff09;、Symbol,大数值类型(BigInt) 引用数据类型&#xff1a;对象(Object)、数组…

mysql面试题30:什么是数据库连接池、应用程序和数据库建立连接的过程、为什么需要数据库连接池、你知道哪些数据库连接池

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:什么是数据库连接池? 数据库连接池是一种用于管理和复用数据库连接的技术。它是在应用程序和数据库之间建立一组数据库连接,并以池的形式存储起…

linux——多线程,线程控制

目录 一.POSIX线程库 二.线程创建 1.创建线程接口 2.查看线程 3.多线程的健壮性问题 4.线程函数参数传递 5.线程id和地址空间 三.线程终止 1.pthread_exit 2.pthread_cancel 四.线程等待 五.线程分离 一.POSIX线程库 站在内核的角度&#xff0c;OS只有轻量级进程…

TensorFlow入门(十六、识别模糊手写图片)

TensorFlow在图像识别方面,提供了多个开源的训练数据集,比如CIFAR-10数据集、FASHION MNIST数据集、MNIST数据集。 CIFAR-10数据集有10个种类,由6万个32x32像素的彩色图像组成,每个类有6千个图像。6万个图像包含5万个训练图像和1万个测试图像。 FASHION MNIST数据集由衣服、鞋子…

软件行业与就业(导师主讲)

在企业软件应用的整体架构体系中&#xff0c;有一部分被称为中间件&#xff0c;那么什么叫中间件&#xff1f; 中间件&#xff08;Middleware&#xff09;是指位于操作系统和应用程序之间的一层软件层&#xff0c;它提供了一组工具和服务&#xff0c;用于简化和增强企业软件应用…

Generative AI 新世界 | 文生图领域动手实践:预训练模型的微调

在上期文章&#xff0c;我们探讨了预训练模型的部署和推理&#xff0c;包括运行环境准备、角色权限配置、支持的主要推理参数、图像的压缩输出、提示工程 (Prompt Engineering)、反向提示 (Negative Prompting) 等内容。 亚马逊云科技开发者社区为开发者们提供全球的开发技术资…