You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:40:03