Parallels Win11下VS2022运行.NET5.0报hostpolicy.dll加载失败
报错码0x800700C1的本质是二进制文件架构和运行环境不匹配,和文件是否存在、访问权限没有任何关系。
你当前的环境是Apple Silicon M1 Pro(ARM64指令集)通过Parallels运行Windows 11,Parallels默认安装的Win11是ARM64版本,而.NET 5.0从未提供Windows ARM64平台的正式支持:不管是在ARM版Win11上靠系统仿真层运行x86/x64版本的.NET5,还是安装泄露/预览版的ARM64 .NET5,核心host层都存在加载兼容问题,最终触发hostpolicy.dll加载失败的错误。
按优先级从高到低排列:
方案1:升级到正式支持ARM64 Windows的.NET版本(最推荐)
.NET 5属于非LTS版本,早在2022年5月就已经终止支持,不会再收到任何安全更新和bug修复。VS2022对.NET 6、.NET 8两个LTS版本的ARM64兼容做了完整适配,在Parallels的ARM版Win11上可以原生运行无兼容问题,操作步骤:
- 打开控制面板「程序和功能」,卸载所有名称带
.NET 5的SDK、运行时组件 - 安装.NET 6或.NET 8的官方SDK,全程默认下一步即可
- 右键你的Hello World项目,选择「属性」,在「应用程序-目标框架」下拉菜单中选择你安装的.NET 6或.NET 8版本,保存后重新编译运行即可
- 打开控制面板「程序和功能」,卸载所有名称带
方案2:必须使用.NET 5时,更换Parallels虚拟机为x64版本Windows 11
如果你有强依赖必须使用.NET 5.0,可以在Parallels中新建虚拟机时选择x64架构的Windows 11镜像安装(注意不要用默认的ARM版镜像)。x64版本Win11和.NET 5.0完全兼容,安装完对应x64版本的.NET 5 SDK后直接运行项目即可,不需要额外配置。缺点是Apple Silicon芯片运行x64系统靠指令集翻译,性能会比ARM版Win11低30%左右。
方案3:必须使用.NET 5+现有ARM版Win11的适配方法
如果既不想升级.NET版本,也不想重装x64虚拟机,可以按以下步骤调整配置:
- 卸载现有所有.NET 5组件,重新安装x64架构的.NET 5.0.17 SDK,不要安装x86版本或任何非官方的ARM版.NET 5
- 右键项目选择「属性」,进入「生成」标签页,将目标平台从
Any CPU改为x64,取消勾选「首选32位」 - 打开系统环境变量设置,确认
C:\Program Files\dotnet\(x64版本dotnet路径)在PATH变量中的优先级高于其他dotnet相关路径 - 打开命令提示符执行
dotnet --info,确认输出的运行时标识为win-x64,再重新打开VS编译运行项目即可
注意:该适配方式不能保证100%稳定,后续如果遇到其他运行时加载错误,仍需通过升级.NET或更换x64系统解决
Failed to load the dll from [C:\Program Files\dotnet\shared\Microsoft.NETCore.App\5.0.17\hostpolicy.dll], HRESULT: 0x800700C1 An error occurred while loading required library hostpolicy.dll from [C:\Program Files\dotnet\shared\Microsoft.NETCore.App\5.0.17] C:\Development\Demo\DemoApp\bin\Debug\net5.0\DemoApp.exe (process 6136) exited with code -2147450750. To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops. Press any key to close this window . . .
内容的提问来源于stack exchange,提问作者Josh Turner

