MacBook M1通过Parallels Desktop运行VS遇System.BadImageFormatException异常求助
异常内容翻译:
'System.BadImageFormatException'发生在 LaplaceFilter.exe 中
未处理的异常类型System.BadImageFormatException出现在 LaplaceFilter.exe 中
尝试加载格式不正确的程序。(HRESULT异常代码:0x8007000B)
程序 '[4636] LaplaceFilter.exe' 已退出,代码为 4294967295 (0xffffffff)
解决办法:
这个问题核心是CPU架构不匹配——M1是ARM64架构,Parallels虚拟机的系统架构、C#项目编译目标、汇编DLL的架构三者必须完全统一,以下是具体修复步骤:
检查Parallels虚拟机的Windows版本架构
如果你的Windows真机是x64版本,Parallels里必须安装x64版本的Windows,不能用ARM64版本。打开Parallels虚拟机设置,确认系统类型为x64 Windows。如果是ARM64 Windows,要么更换x64系统镜像,要么重新编译汇编DLL为ARM64架构。锁定C#项目的平台目标
在Visual Studio中右键项目 → 属性 → 生成 → 平台目标,设置为和汇编DLL一致的架构(比如x64),不要选Any CPU——Any CPU在ARM虚拟机上会自动以ARM模式运行,导致加载x64 DLL失败。同时取消勾选“首选32位”选项,确保架构完全匹配。重新编译汇编DLL到对应架构
如果你使用ARM64版本的Windows虚拟机,原来针对x64编写的汇编指令集不兼容,必须重新调整汇编代码(ARM64指令和x64差异较大),再编译为ARM64架构的DLL。用工具验证DLL架构
打开Visual Studio开发者命令提示符,执行命令:dumpbin /headers 你的汇编DLL文件名.dll,查看输出里的machine字段:x64对应AMD64,ARM64对应ARM64。确保这个结果和虚拟机、C#项目的架构完全一致。检查Parallels处理器设置
打开Parallels虚拟机配置 → 处理器,确保开启对应架构的兼容性支持。比如运行x64虚拟机时,需勾选“启用嵌套虚拟化”或“与Intel VT-x/EPT或AMD-V/RVI兼容”选项。
内容的提问来源于stack exchange,提问作者Kromczetto

