返回

.NET8 AOT报错:System.IO.FileNotFoundException: Could not find file 'Microsoft.AspNetCore'

2023-11-28 .NET8 AOT AOT报错 System.IO.FileNotFoundException Microsoft.AspNetCore 1153 0

AOT在Visual Studio中运行是没有问题,但要采用默认的发布配置就会报错。首先,如果采用默认发布,目标运行时的默认配置是“可移植”,会报一个错,如下图:

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

.NET8 AOT报错

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

Unhandled Exception: System.IO.FileNotFoundException: Could not find file 'Microsoft.AspNetCore'.

.NET8 AOT报错

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

您可能感兴趣:

阿里云 云服务器 99元1年 2核2G 3M固定带宽 续费与新购同价

领取 通义灵码 免费使用资格 兼容 Visual Studio Code、Visual Studio、JetBrains IDEs 等主流编程工具, 为你提供高效、流畅、舒心的智能编码体验!

DOVE 网络加速器 梯子 免费 试用

顶部