Windows发布的.NET 9 osx-arm64自包含appHost在macOS运行被终止
解决.NET 9自包含OSX-arm64应用在macOS上运行
zsh: killed的问题 核心排查方向:macOS安全机制与代码签名问题
你遇到的zsh: killed大概率是macOS的Gatekeeper安全机制阻止了未签名的原生二进制(appHost)运行,而通过dotnet MacDeploy.dll能正常执行是因为托管代码由.NET Runtime处理,绕过了对appHost的签名校验。以下是具体解决步骤:
1. 先移除文件隔离属性(快速测试)
macOS会对从外部复制的文件添加隔离标记,直接移除即可尝试恢复运行:
xattr -d com.apple.quarantine ./MacDeploy
执行后再运行./MacDeploy,如果正常输出,说明是隔离标记导致的问题。
2. 给appHost进行代码签名(长期解决方案)
如果移除隔离属性无效,必须给原生二进制签名:
- 生成自签名证书:
打开「钥匙串访问」→ 顶部菜单栏「证书助理」→「创建证书」,填写证书名称(比如MyCodeSignCert),证书类型选择「代码签名」,勾选「让我覆盖这些默认值」,一路下一步完成创建。之后在钥匙串中找到该证书,右键「显示简介」→「信任」,将「代码签名」设置为「始终信任」。 - 执行签名命令:
替换命令中的证书名称为你刚才创建的名称,签名完成后再运行codesign -s "MyCodeSignCert" --force --deep ./MacDeploy./MacDeploy即可。
3. 查看详细错误日志定位问题
如果以上步骤都无效,通过以下方式获取更详细的错误信息:
- 用
dtruss追踪系统调用,查看进程被终止的具体原因:sudo dtruss ./MacDeploy - 查看系统日志中相关进程的记录:
log show --predicate 'process == "MacDeploy"' --info --debug
4. 验证发布配置正确性
确保Windows上的发布配置没有问题:
- 用CLI命令重新发布,避免Visual Studio配置遗漏:
dotnet publish -c Release -r osx-arm64 --self-contained true - 确认发布后的文件完整,所有依赖库(如
.dylib文件)都已复制到macOS设备上。
内容的提问来源于stack exchange,提问作者Eugene Mayevski 'Callback
相关产品推荐
相关产品推荐

