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

无需Visual Studio,如何创建macOS通用架构.NET Core自包含应用

构建macOS通用架构(x86_64/arm64)的自包含.NET Core应用方案

核心结论

目前不存在完全平台无关的.NET Core运行时DLL,因为核心组件(如System.Private.CoreLib.dll)包含架构特定的原生代码,无法跨x86_64/arm64通用。以下是无需依赖Visual Studio for Mac的可行方案:


方案一:双架构打包+架构检测启动脚本(最成熟可靠)

这是当前实现通用架构自包含应用的标准方式,通过分别构建两个架构版本,用脚本根据系统架构动态启动对应版本,同时复用相同文件减少体积:

步骤1:分别发布两个架构的自包含版本

执行以下命令生成两个架构的独立发布包:

dotnet publish -c Release -r osx-x64 --self-contained -o ./publish/x64
dotnet publish -c Release -r osx-arm64 --self-contained -o ./publish/arm64

步骤2:构建通用.app包结构

创建标准的macOS应用包目录结构,示例如下:

MyApp.app/
└── Contents/
    ├── Info.plist  # 应用配置文件,按需编写
    └── MacOS/
        ├── x64/          # 存放osx-x64的发布文件
        ├── arm64/        # 存放osx-arm64的发布文件
        └── MyApp         # 架构检测启动脚本

步骤3:编写启动脚本

在MyApp.app/Contents/MacOS/下创建名为MyApp的脚本,内容如下:

#!/bin/bash
# 检测当前系统架构
ARCH=$(uname -m)
# 根据架构启动对应版本的应用
if [ "$ARCH" = "arm64" ]; then
    exec "$(dirname "$0")/arm64/MyApp" "$@"
else
    exec "$(dirname "$0")/x64/MyApp" "$@"
fi

给脚本添加执行权限:

chmod +x MyApp.app/Contents/MacOS/MyApp

步骤4:复用相同文件减少体积

对比x64和arm64目录下的文件,将业务DLL、资源文件等架构无关的相同文件移到共享目录(如../Shared/),然后在两个架构目录中创建符号链接指向共享文件,避免重复存储。


关于"平台无关运行时"的说明

.NET Core的核心运行时组件(包括System.Private.CoreLib.dll)包含针对特定架构优化的原生代码(如JIT编译器、平台系统调用逻辑),因此不存在完全跨x86_64/arm64的通用运行时DLL,必须为每个架构单独提供对应的运行时文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:38:29