教程:使用本机 AOT 发布 ASP.NET Core 应用
ASP.NET Core 8.0 引入了对 .NET 本机预先 (AOT) 的支持。
注意
- Native AOT 功能当前为预览版。
- 在 .NET 8 中,并非所有 ASP.NET Core 功能都与 Native AOT 兼容。
- 提供了选项卡,可用于查看 .NET CLI 和 Visual Studio 说明:
- 即使选择了 CLI 选项卡,Visual Studio 也是先决条件。
- 即使选择了 Visual Studio 选项卡,也必须使用 CLI 进行发布。
先决条件
在 Linux 上,请参阅本机 AOT 部署的先决条件。
安装了“使用 C++ 的桌面开发”工作负载的 Visual Studio 2022 预览版。
注意
Visual Studio 2022 预览版是必需的,因为本机 AOT 需要 link.exe 和 Visual C++ 静态运行时库。 未计划在没有 Visual Studio 的情况下支持本机 AOT。
使用本机 AOT 创建 Web 应用
创建配置为使用本机 AOT 的 ASP.NET Core API 应用:
运行以下命令:
dotnet new webapiaot -o MyFirstAotWebApi && cd MyFirstAotWebApi
显示了如下例所示的输出:
The template "ASP.NET Core Web API (Native AOT)" was created successfully.
Processing post-creation actions...
Restoring C:\Code\Demos\MyFirstAotWebApi\MyFirstAotWebApi.csproj:
Determining projects to restore...
Restored C:\Code\Demos\MyFirstAotWebApi\MyFirstAotWebApi.csproj (in 302 ms).
Restore succeeded.
发布本机 AOT 应用
验证是否可使用本机 AOT 发布应用:
dotnet publish
dotnet publish
命令:
- 编译源文件。
- 生成已编译的源代码文件。
- 将生成的程序集传递给本机 IL 编译器。 IL 编译器生成本机可执行文件。 本机可执行文件包含本机计算机代码。
显示了如下例所示的输出:
MSBuild version 17.<version> for .NET
Determining projects to restore...
Restored C:\Code\Demos\MyFirstAotWebApi\MyFirstAotWebApi.csproj (in 241 ms).
C:\Code\dotnet\aspnetcore\.dotnet\sdk\8.0.<version>\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIde
ntifierInference.targets(287,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotne
t-support-policy [C:\Code\Demos\MyFirstAotWebApi\MyFirstAotWebApi.csproj]
MyFirstAotWebApi -> C:\Code\Demos\MyFirstAotWebApi\bin\Release\net8.0\win-x64\MyFirstAotWebApi.dll
Generating native code
MyFirstAotWebApi -> C:\Code\Demos\MyFirstAotWebApi\bin\Release\net8.0\win-x64\publish\
输出可能与上述示例不同,具体取决于使用的 .NET 8 版本、使用的目录等因素。
查看输出目录的内容:
dir bin\Release\net8.0\win-x64\publish
显示了如下例所示的输出:
Directory: C:\Code\Demos\MyFirstAotWebApi\bin\Release\net8.0\win-x64\publish
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 30/03/2023 1:41 PM 9480704 MyFirstAotWebApi.exe
-a--- 30/03/2023 1:41 PM 43044864 MyFirstAotWebApi.pdb
可执行文件是自包含的,不需要运行 .NET 运行时。 启动后,它的行为与在开发环境中运行的应用的行为相同。 运行 AOT 应用:
.\bin\Release\net8.0\win-x64\publish\MyFirstAotWebApi.exe
显示了如下例所示的输出:
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\Code\Demos\MyFirstAotWebApi
库和本机 AOT
目前,在 ASP.NET Core 项目中使用的许多常用库在针对本机 AOT 的项目中使用时存在一些兼容性问题,例如:
- 使用反射来检查和发现类型。
- 在运行时有条件地加载库。
- 动态生成代码以实现功能。
需要更新使用这些动态功能的库,才能与本机 AOT 配合使用。 可以使用 Roslyn 源生成器等工具更新它们。
建议希望支持本机 AOT 的库作者执行以下操作:
- 阅读本机 AOT 兼容性要求。
- 准备要剪裁的库。