.net8下发布AOT报错避坑

上篇关于《.net8发布后,AOT解决了JWT Authentication》的文章,在Visual Studio中运行是没有问题,但要采用默认的发布配置就会报错。

.NET8发布后,AOT解决了JWT Authentication

桂素伟,公众号:桂迹.NET8发布后,AOT解决了JWT Authentication

首先,如果采用默认发布,目标运行时的默认配置是“可移植”,会报一个错,如下图:

e445f4fc54d228df0c5f14bb4b73aad7.png

我们知道AOT机制是生成本机执行码,所以这里的“可移植”不正确,应该准确选择对应的平台,本例中是windows,目前的AOT不支持x32,所以选择x64。

然后再次运行发布,系统会提示发布成功,但当运行程序时,应用会提示打不到Microsoft.AspNetCore,具体错误如下:

07e2b84ca6a6257e3a881269b4611349.png

即然发布成功,怎么还能找不到文件,并且是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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值