ToB企服应用市场:ToB评测及商务社交产业平台

标题: .NET9 AOT部署 [打印本页]

作者: 莱莱    时间: 2025-1-22 14:55
标题: .NET9 AOT部署
概念

AOT是Ahead-of-Time的缩写,AOT是将C#程序提前编译为呆板代码(通常为平台特定的二进制文件),在应用程序启动之前完成编译过程。
微软官方文档是如许说的
  1. 将应用程序发布为本机 AOT 会生成一个自包含的应用程序,并且已提前 (AOT) 编译为本机代码。原生 AOT 应用程序具有更快的启动时间和更小的内存占用。这些应用可以在未安装 .NET 运行时的计算机上运行。
  2. 原生 AOT 的优势对于具有大量已部署实例的工作负载(例如云基础设施和超大规模服务)最为明显。.NET 8 添加了对本机 AOT 的 ASP.NET Core 支持。
  3. 本机 AOT 部署模型使用预先编译器在发布时将 IL 编译为本机代码。本机 AOT 应用程序在应用程序运行时不使用实时 (JIT) 编译器。本机 AOT 应用程序可以在不允许 JIT 的受限环境中运行。本机 AOT 应用程序以特定的运行时环境为目标,例如 Linux x64 或 Windows x64,就像发布自包含应用程序一样。
复制代码
C# AOT部署和JIT部署两种不同的编译和部署方式对比

AOT(Ahead-of-Time)部署:

AOT是将C#程序提前编译为呆板代码(通常为平台特定的二进制文件),在应用程序启动之前完成编译过程。
优点:

缺点:

JIT(Just-in-Time)部署:

JIT是在应用程序运行时将中央语言(IL)编译为呆板代码,编译过程是动态发生的。
优点:

缺点:

总结:

选择AOT照旧JIT部署,需要根据具体的应用场景、性能需求、开发周期宁静台要求来权衡。
实操

创建一个办理方案,创建两个控制台项目,一个启用AOT,一个不启用
未启用AOT的csproj文件内容
  1. <Project Sdk="Microsoft.NET.Sdk">
  2.   <PropertyGroup>
  3.     <OutputType>Exe</OutputType>
  4.     <TargetFramework>net9.0</TargetFramework>
  5.     <ImplicitUsings>enable</ImplicitUsings>
  6.     <Nullable>enable</Nullable>
  7.   </PropertyGroup>
  8. </Project>
复制代码
启用AOT的csproj文件内容
  1. <Project Sdk="Microsoft.NET.Sdk">
  2.   <PropertyGroup>
  3.     <OutputType>Exe</OutputType>
  4.     <TargetFramework>net9.0</TargetFramework>
  5.     <ImplicitUsings>enable</ImplicitUsings>
  6.     <Nullable>enable</Nullable>
  7.   </PropertyGroup>
  8. </Project>  true    true  
复制代码
通过对比可以发现就这个设置 true启用AOT
参考官方文档:
https://learn.microsoft.com/zh-cn/dotnet/core/deploying/native-aot/?tabs=windows%2Cnet8
AOT部署一般要在csproj增加如下设置
  1. <PublishAot>true</PublishAot>
  2. <IsAotCompatible>true</IsAotCompatible>
  3. <StripSymbols>false</StripSymbols>
  4. <PlatformTarget>x64</PlatformTarget>
复制代码
发布到Win体系的AOT

发布命令参考:
https://learn.microsoft.com/zh-cn/dotnet/core/deploying/ready-to-run
https://learn.microsoft.com/zh-cn/dotnet/core/tools/dotnet-publish
1.直接使用VS进行发布


2.使用dotnet命令

使用cmd进入到在csproj文件夹目录,实行dotnet命令
dotnet publish -c Release -r win-x64 -publishReadyToRun=true


发布到Liunx体系的AOT

如果直接在VS 2022上发布到Liunx的AOT部署会报下面错误
Cross-OS native compilation is not supported.
1、在 os-linux-ubuntu-2204 上安装 .NET SDK 或 .NET 运行时

使用包管理器安装

参考文档:
https://learn.microsoft.com/zh-cn/dotnet/core/install/linux-ubuntu-install?tabs=dotnet9&pivots=os-linux-ubuntu-2204
添加存储库
  1. sudo add-apt-repository ppa:dotnet/backports
复制代码
安装SDK
  1. sudo apt-get update && \
  2.   sudo apt-get install -y dotnet-sdk-9.0
复制代码
安装运行时
  1. #ASP.NET Core 运行时
  2. sudo apt-get update && \
  3.   sudo apt-get install -y aspnetcore-runtime-9.0
复制代码
  1. #.NET 运行时
  2. sudo apt-get install -y dotnet-runtime-9.0
复制代码
使用脚本安装

参考文档
https://learn.microsoft.com/zh-cn/dotnet/core/install/linux-scripted-manual#scripted-install
  1. # 通过 wget 下载脚本
  2. wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
复制代码
  1. #可执行文件运行的权限
  2. chmod +x ./dotnet-install.sh
复制代码
此脚本默认安装最新的长期支持 (LTS) SDK 版本,即 .NET 8。 若要安装最新版本(可能不是 (LTS) 版本),请使用 --version latest 参数。
  1. ./dotnet-install.sh --version latest
  2. # 若要安装 .NET 运行时而非 SDK,请使用 --runtime 参数。
  3. ./dotnet-install.sh --version latest --runtime aspnetcore
  4. # 可以通过 --channel 参数更改特定主要版本来指示特定版本。 以下命令安装 .NET 9.0 SDK。
  5. ./dotnet-install.sh --channel 9.0
复制代码
手动安装

参考文档:
https://blog.csdn.net/qq_36437991/article/details/120389823
下载SDK/runtime地址:https://dotnet.microsoft.com/zh-cn/download/dotnet/9.0
这里下载的是dotnet-sdk-9.0.102-linux-x64.tar.gz
  1. # 创建文件夹
  2. sudo mkdir -p /usr/dotnet/9.0.102
  3. # 解压文件
  4. sudo tar xzf dotnet-sdk-9.0.102-linux-x64.tar.gz -C /usr/dotnet/9.0.102/
  5. # 使用vim修改/etc/profile文件/或者使用SSH更改文件
  6. sudo vim /etc/profile
  7. # 在/etc/profile文件下增加下面内容
  8. export DOTNET_HOME=/usr/dotnet/9.0.102
  9. export PATH=${DOTNET_HOME}:$PATH
  10. # 重新加载系统级别的环境配置文件
  11. source /etc/profile
复制代码

2、检查安装.NET的版本

参考文档:
https://learn.microsoft.com/zh-cn/dotnet/core/install/how-to-detect-installed-versions?pivots=os-linux
  1. # 查看版本
  2. dotnet --version
  3. # 检查 SDK 版本
  4. dotnet --list-sdks
  5. # 检查运行时版本
  6. dotnet --list-runtimes
复制代码
3、 安装C++编译工具

参考文档:
https://blog.darkthread.net/blog/publish-native-aot-on-linux/
https://learn.microsoft.com/zh-cn/dotnet/core/deploying/native-aot/?tabs=linux-ubuntu%2Cnet9plus
  1. sudo apt-get install clang zlib1g-dev
复制代码
4、把办理方案代码上传到Linux体系某个文件夹上并转到要发布的项目csproj文件地点目录上

5、实行dotnet命令发布
  1. dotnet publish -c Release -r linux-x64 --self-contained /p:PublishAot=true
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4