AOT在Visual Studio中运行是没有问题,但要采用默认的发布配置就会报错。首先,如果采用默认发布,目标运行时的默认配置是“可移植”,会报一个错,如下图:
我们知道AOT机制是生成本机执行码,所以这里的“可移植”不正确,应该准确选择对应的平台,本例中是windows,目前的AOT不支持x32,所以选择x64。
然后再次运行发布,系统会提示发布成功,但当运行程序时,应用会提示打不到Microsoft.AspNetCore,具体错误如下:
Unhandled Exception: System.IO.FileNotFoundException: Could not find file 'Microsoft.AspNetCore'.
即然发布成功,怎么还能找不到文件,并且是Microsoft.AspNetCore文件,按理这个Nuget包在很早的版中就不用了,这里很容易就引导去找少文件或怀疑环境出错了。毕竟发布成功,运行有问题。其实如果仔细观察的话,虽然发布成功了,但有一行发布时的命令行提示:ILC: Method '[AOTDemo01_dotnet8]Program.<Main>$(string[])' will always throw because: Failed to load assembly 'Microsoft.AspNetCore',其实在发布时,就提示找不到Microsoft.AspNetCore,但这次提示的是命名空间,所以间接说发布是失败的。
看到这个信息,估计就怀疑环境有问题了,毕竟AOT发布的是本机代码吗。那就要继续看发布配置了。这时,“部署模式”选项是“框架依赖”,这时你应该能对得上了,因为AOT不可能再依赖asp.net core的运行时,所以这里如果不改,那就是找包时不包含这部分,所以发布出去的应用自然缺少Microsoft.AspNetCore的命名空间了。“部署模式”切换成“独立”,再次发布,成功了,并且能正常运行。这时,你就能美美得到一个15.5M的exe。
所以Visual Studio可以判断是AOT项目,在发布文件里,自动把不支持的目标框架和目标运行时隐藏就更好了。
另外,在终端命令行里,用dotnet publish -r win-x64发布,可以直接成功,看来还是命令行无敌呀,命令行的默认发布地址是:bin\Release\net8.0\win-x64\publish。

站心网
为您推荐

.NET 10 C# 14 必知的 6 大语法糖:提升开发效率,简洁优雅

2025年最佳.NET C#实现PDF转Word:主流库功能与对比

.NET Core 图像处理:Magick.NET 与 SkiaSharp 的全面对比

使用.NET C#将图片转换为.ico图标文件的多种方法


RabbitMQ 4.0+重大更新!.NET(C#)开发者必须掌握的6大升级要点

Paylinks:基于现代 .NET 的跨平台第三方支付 SDK 详解与使用示例

.NET 使用 Qdrant.Client 连接向量数据库 Qdrant 的完整指南
C# 认识 System.Guid

Entity Framework(EF) Core 10新特性全面解析:提升开发效率的关键更新

.NET(C#)使用 iText7 高效处理PDF文件的全面指南
.NET Exception: Received an unexpected EOF or 0 bytes from the transport stream.解决方法

微软退出中国对.NET开发人员有什么影响?

EasyCaching:一款灵活高效的 .NET 缓存库
.NET 依赖注入如何一个接口注册两种实现
.NET C# 过滤从富文本编辑器html里的Javascript脚本

ZLinq:.NET 高性能 LINQ 替代方案及其使用指南
