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

.NET 9 ARM64控制台程序运行失败问题求助

问题排查:osx-arm64自包含发布的.NET程序在M2 Mac被kill

可能的失败原因

  • 代码签名/权限限制:M2 Mac的系统完整性保护(SIP)对原生arm64程序的签名要求更严格,跨平台编译的未签名arm64程序容易被拦截;而x64版本通过Rosetta转译执行,签名限制相对宽松。
  • 跨平台编译的架构不兼容:Windows环境下发布osx-arm64时,若缺少对应架构的编译工具链,可能生成损坏或不兼容的二进制文件。
  • 自包含发布的依赖缺失:理论上自包含发布会打包所有依赖,但如果arm64版本的系统依赖库未正确嵌入,会导致程序启动失败被终止。

排查步骤

  1. 验证程序架构与完整性

    • 在Mac终端执行file ./YourAppName,确认输出包含Mach-O 64-bit executable arm64,确保程序是正确的arm64架构。
    • 检查文件大小是否与Windows发布目录中的文件一致,排除传输过程中的损坏。
  2. 尝试手动签名

    • 在Mac上用自签名方式给程序添加签名(无需开发者账号):
      codesign --force --deep -s - ./YourAppName
      
    • 签名完成后重新运行程序,看是否仍出现被kill的情况。
  3. 查看系统错误日志

    • 打开Mac自带的「控制台」应用(Launchpad搜索Console),在搜索框输入程序名称或kernel,过滤出相关日志。程序被kill的原因(如签名无效、内存访问错误)通常会在kernel日志中显示。
    • 用命令行快速查看:
      # 查看指定进程的日志
      log show --predicate 'process == "YourAppName"' --info
      # 查看内核级终止记录
      dmesg | grep -i killed
      
  4. 重新发布程序

    • 在Windows的Visual Studio中,确认发布配置:目标运行时选择osx-arm64,勾选「自包含」,确保发布过程无报错。
    • 尝试用命令行发布避免UI配置问题:
      dotnet publish -c Release -r osx-arm64 --self-contained true
      
    • 检查发布目录的文件完整性,确保可执行文件及依赖库齐全。

日志查看位置

  • 控制台应用:Mac系统自带的可视化日志工具,可精准过滤程序相关的启动、终止日志,是最直观的排查入口。
  • 命令行日志:
    • log show:可按进程名过滤日志,包含程序启动失败的详细原因。
    • dmesg:查看内核层面的操作记录,程序被系统kill的核心原因会在这里输出。
  • 用户日志目录:~/Library/Logs下可能存在部分应用日志,但.NET控制台程序的启动失败日志大多集中在系统全局日志中。

内容的提问来源于stack exchange,提问作者GuruGurra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:32:33