欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 如何在Net8.0平台下开发AOT项目,项目实战分析

如何在Net8.0平台下开发AOT项目,项目实战分析

2025/4/22 8:55:55 来源:https://blog.csdn.net/houbincarson/article/details/140742974  浏览:    关键词:如何在Net8.0平台下开发AOT项目,项目实战分析

1. 前言

前面的文章我们讨论过什么是AOT,以及AOT适用于什么场景, dotnet开发编译之争:Ahead-of-Time(AOT) vs Just-in-Time(JIT)谁才是未来最佳编译选择?,那么如何在Net8.0平台下开发AOT项目。

2. 先决条件

在安装的Visual Studio 2022的时候,将“ASP.NET 和 Web开发”和"C++桌面开发"都有安排上。
在这里插入图片描述

3. 项目准备

创建一个ASP.NET CORE Webapi (Native AOT)项目。这个项目的模板是使用了Asp.Net Core最小API的Restful Web API的项目模板。

如图所示:

在这里插入图片描述

或者使用.Net Core CLI命令来创建项目:

dotnet new webapiaot -o AOTtest
cd AOTtest
dotnet new sln -n "AOTtest"

在这里插入图片描述

4. 编译运行

通过运行发布配置,我们可知,无法正常发布。
在这里插入图片描述
所以,我们要使用.Net Core CLI命令来发布。发布成功的窗口如下:
在这里插入图片描述
打开发布Release所在的文件目录。可以看到目前的文件就一个应用程序
在这里插入图片描述
双击启动应用程序,可以在未安装.Net8的环境下运行了。
在这里插入图片描述
浏览器访问地址,可得结果
在这里插入图片描述
自此,我们就已经成功的将模板文件发布成功。

5. 分析AOT模板项目

一、先看完整的源码:

using System.Text.Json.Serialization;var builder = WebApplication.CreateSlimBuilder(args);builder.Services.ConfigureHttpJsonOptions(options =>
{options.SerializerOptions.TypeInfoResolverChain.Insert(0, AppJsonSerializerContext.Default);
});var app = builder.Build();var sampleTodos = new Todo[] {new(1, "Walk the dog"),new(2, "Do the dishes", DateOnly.FromDateTime(DateTime.Now)),new(3, "Do the laundry", DateOnly.FromDateTime(DateTime.Now.AddDays(1))),new(4, "Clean the bathroom"),new(5, "Clean the car", DateOnly.FromDateTime(DateTime.Now.AddDays(2)))
};var todosApi = app.MapGroup("/todos");
todosApi.MapGet("/", () => sampleTodos);
todosApi.MapGet("/{id}", (int id) =>sampleTodos.FirstOrDefault(a => a.Id == id) is { } todo? Results.Ok(todo): Results.NotFound());app.Run();public record Todo(int Id, string? Title, DateOnly? DueBy = null, bool IsComplete = false);[JsonSerializable(typeof(Todo[]))]
internal partial class AppJsonSerializerContext : JsonSerializerContext
{}

这段代码是一个基于 .NET 8 的 ASP.NET Core Web API 应用程序,使用了 Slim API 风格的路由配置。它定义了一个简单的 Todo RESTful API,并使用 System.Text.Json 进行 JSON 序列化和反序列化。

  1. 引入System.Text.Json.Serialization: 引入这个命名空间是为了在项目中使用 System.Text.Json 提供的 JSON 序列化和反序列化功能。
  2. 创建WebApplication实例: 使用 WebApplicationBuilder 创建一个应用构建器,通过 .CreateSlimBuilder(args) 方法初始化。
  3. 配置JsonSerializerOptions: 在服务容器中注册并配置 HTTP JSON 选项。这里插入自定义的类型信息解析器到链表的头部,以便在序列化和反序列化时使用 AppJsonSerializerContext 中的类型映射信息。
  4. 构建和运行应用程序: 调用 builder.Build() 构建应用程序实例,然后使用 app.Run() 启动应用监听HTTP请求。
  5. Todo模型定义: 定义了一个名为 Todo 的记录类型,表示一个待办事项,包括ID、标题、截止日期(DueBy)以及是否已完成(IsComplete)的状态。
  6. API路由设置:
  7. /todos/:GET 请求返回所有待办事项。
  8. /todos/{id}:GET 请求根据给定的 ID 返回单个待办事项。如果找到对应 ID 的待办事项,则返回 Results.Ok(todo);否则返回 Results.NotFound() 表示未找到资源。
  9. 数据初始化: 定义了一些示例待办事项存储在 sampleTodos 变量中。
  10. 自定义JsonSerializerContext: 定义了一个内部部分类 AppJsonSerializerContext,继承自 JsonSerializerContext。此上下文用于为 Todo 类型及其数组提供自定义的序列化和反序列化规则。通过 [JsonSerializable(typeof(Todo[]))] 特性标记,指示编译器生成相关的序列化逻辑。
    总结起来,这段代码主要实现了一个简单的 REST API,用于管理一组待办事项,利用 .NET 8 的内置 JSON 序列化机制处理数据的传输,并且对序列化过程进行了自定义配置。

6. 关于.http文件

这个项目模板中,还有一个.http的文件,可能这个都比较少见,不知道干什么的。我之前的文章有介绍过。可以转链接查看 .http文件和终结点资源管理器。在这里,我们就简单介绍下。

@AOTtest_HostAddress = http://localhost:5132GET {{AOTtest_HostAddress}}/todos/
Accept: application/json###GET {{AOTtest_HostAddress}}/todos/1
Accept: application/json

在我们启动项目后,可以点击这里发送请求,就可以直接获取结果。

在这里插入图片描述
非常方便的高效测试。

7. 总结

本文介绍了AOT实战项目,并且详细分析了这个模板项目的内容。希望对你了解和掌握AOT新特性有一定的帮助。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词