.NET 8 发布第三个预览版
.NET 8 Preview 3 现已推出,这个预览版包括对构建路径、工作负载、Microsoft.Extensions 和容器的更改,还包括针对 Arm64 的 JIT 和动态 PGO 的性能改进。
以下为该预览版的部分改动:
SDK 改动
对 SDK 进行了多项改进,并进行了重大更改。
有关重大更改的更多信息,请参阅 .NET SDK 不再更改退出时的编码。
简化输出路径
.NET SDK 引入了一个选项来创建更统一、更简化的输出路径结构。新的输出路径侧重于:
- 将所有构建输出收集在一个公共位置
- 在公共位置下按项目分隔构建输出
- 将整体构建输出布局展平到最多三层深度
要选择新的输出路径布局,需要在 Directory.Build.props
文件中设置 UseArtifactsOutput
属性。
开始的最简单方法是在存储库的根目录中运行 dotnet new buildprops
,打开生成的 Directory.Build.props
文件,然后将以下内容添加到该文件中的 PropertyGroup
:
<UseArtifactsOutput>true</UseArtifactsOutput>
此后,所有项目的构建输出都将放入存储库根目录中的 .artifacts 目录中,该目录可配置,只需将 Directory.Build.props 文件中的 ArtifactsPath 属性设置为其他目录。
.artifacts
目录的布局将采用 <ArtifactsPath>\<Type of Output>\<Project Name>\<Pivots>
形式。
新的dotnet workload clean
命令
新的命令,可帮助清理剩余的工作负载包(工作负载所包含的实际功能、工具和模板单元):
dotnet workload clean
clean 有两种操作模式,分别是:
dotnet workload clean
这个模式为基于文件或基于 MSI 的工作负载运行工作负载垃圾收集。在这种模式下,垃圾收集行为正常,只清理孤立的包本身。
dotnet workload clean --all
与 workload clean 不同, workload clean --all 不定期运行垃圾回收,这意味着它会清除机器上所有,不是来自 Visual Studio 且属于当前 SDK 工作负载安装类型(基于文件或基于 MSI)的现有包。
运行时改动
引入验证选项结果生成器 (ValidateOptionsResultBuilder)
新的 ValidateOptionsResultBuilder 使创建 ValidateOptionsResult 对象变得更容易,这是实现 IValidateOptions.Validate(String, TOptions) 所必需的。
此构建器允许累积多个错误,然后一次查看所有问题,并相应地解决它们。
使用示例:
ValidateOptionsResultBuilder builder = new(); builder.AddError("Error: invalid operation code"); builder.AddResult(ValidateOptionsResult.Fail("Invalid request parameters")); builder.AddError("Malformed link", "Url"); // Build ValidateOptionsResult object has accumulating multiple errors. ValidateOptionsResult result = builder.Build(); // Reset the builder to allow using it in new validation operation. builder.Clear();
引入配置绑定源码生成器(the configuration binding source generator)
使用新的配置绑定源代码生成器,可自动生成无反射和 AOT 友好的绑定实现。
该生成器会探测 Configure 、 Bind 和 Get 调用,可以从中检索类型信息。
using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; WebApplicationBuilder builder = WebApplication.CreateBuilder(args); IConfigurationSection section = builder.Configuration.GetSection("MyOptions"); // !! Configure call - to be replaced with source-gen'd implementation builder.Services.Configure<MyOptions>(section); // !! Get call - to be replaced with source-gen'd implementation MyOptions options0 = section.Get<MyOptions>(); // !! Bind call - to be replaced with source-gen'd implementation MyOptions options1 = new MyOptions(); section.Bind(myOptions1); WebApplication app = builder.Build(); app.MapGet("/", () => "Hello World!"); app.Run(); public class MyOptions { public int A { get; set; } public string S { get; set; } public byte[] Data { get; set; } public Dictionary<string, string> Values { get; set; } public List<MyClass> Values2 { get; set; } } public class MyClass { public int SomethingElse { get; set; } }
在项目中启用生成器时,编译器会隐式地选择生成的方法,而不是预先存在的基于反射的框架实现。
要启用该源代码生成器,请下载 Microsoft.Extensions.Configuration.Binder 的最新预览版。生成器默认关闭。要使用它,请将以下属性添加到项目文件中:
<PropertyGroup> <EnableMicrosoftExtensionsConfigurationBinderSourceGenerator>true</EnableMicrosoftExtensionsConfigurationBinderSourceGenerator> </PropertyGroup>
.NET 8 将在第四个预览版向 .NET SDK 添加启用机制,不需要 NuGet 包引用也可以使用源代码生成器。
本机代码生成 Native code generation
对 JIT 编译器进行了以下改进:
Arm64
- 将
OR(condition, condition)
转换为CCMP
。它允许 JIT 在 arm64 上发出CCMP
以进行按位或关系比较。PR#83089 - 为 arm64 优化了
x < 0
和x >= 0
PR #83176 - 优化了除法在某些场景的溢出检查。PR #82924
配置文件引导优化
- 启用了基本块计数的互锁分析 runtime #82775
- 支持配置文件合成 runtime #82926, runtime #83068, runtime #83185, runtime #83567
- 在 Tier0 中启用了更多内在函数,例如 get_IsValueType runtime #83002
其他容器镜像等优化可在微软博客中了解详情。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Nuxt 3.4 发布,基于 Vue 3 的 Web 框架
Nuxt 是使用简便的 Web 框架,用于构建现代和高性能的 Web 应用,可以部署在任何运行 JavaScript 的平台上。去年发布的 Nuxt3基于 Vue 3 构建,为 TypeScript 提供了 “一等公民” 支持,并进行了一次彻底的重构,对内核进行了精简,速度更快,体验更好。 近日发布的 Nuxt 3.4.0 则是 Nuxt 3 的最新版本,带来了令人兴奋的新功能,包括对 View Transitions API 的支持、将丰富的 JavaScript 有效负载 (JavaScript payload) 从服务器传输到客户端等等。 Nuxt 3.4.0 主要变化 支持 View Transitions API 基于 Chromium 的浏览器提供了一个新的 Web 平台 API:View Transitions API。这是原生浏览器转换的新功能,可以在不同页面上的不相关元素之间进行转换。 Nuxt 现在提供了一个实验性实现,它将在 v3.4 发布周期中积极开发。 export default defineNuxtConfig({ experimental: { ...
- 下一篇
Envio v0.5.0 发布,用于管理环境变量的现代安全 CLI 工具
Envio v0.5.0 现已发布。Envio 是一种命令行工具,可简化跨多个配置文件的环境变量管理。它允许用户轻松地在不同的配置之间切换并将它们应用到他们当前的环境中。 具体更新内容包括: Features 为用户配置文件添加 GPG 加密,可参阅Usage 添加使用 CLI 的 flags,可参阅Usage Bug Fixes 修复问题#17,其中 envio 假定 shell 配置文件位于主目录中,如果找不到它会出现 panic;现在如果找不到,envio 现在会提示用户输入他们的 shell config。 修复 envio 在找不到 shell config 时不执行首次设置示例就退出的错误;envio 现在会检查配置目录以确认它是否是全新安装。 Other 从magic_crypt切换到age的 passphrase encryption 方法#13 详情可查看更新说明:https://github.com/humblepenguinn/envio/releases/tag/v0.5.0
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker快速安装Oracle11G,搭建oracle11g学习环境