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。

站心网
为您推荐

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 替代方案及其使用指南

.NET使用AutoMapper简化对象映射
.NET C# RESTful API交互Refit库使用教程
.NET C# System.Text.Json进阶使用技巧
.NET Core 使用ML.NET 机器学习分析预测股票走势
.NET 日志库 Serilog 使用教程
ASP.Net Core WebApi几种版本控制对比
.NET CORE 设置cookie以及获取cookie
.NET C# 单元测试 mock File.Exists的返回值
.NET Core 适配 鸿蒙HarmonyOS 的最新进展
VS创建.NET Core项目使用Docker方式部署到Linux服务器
.NET C#查询全球IP地址信息 IPTools库 使用教程
