【问题标题】:Unable to create dmg executable for Mac OS with .NET Core 2.1无法使用 .NET Core 2.1 为 Mac OS 创建 dmg 可执行文件
【发布时间】:2019-04-06 12:17:56
【问题描述】:

我正在学习如何将 .NET Core 应用程序部署到多个平台,但我无法为 Mac OS 生成 .dmg 可执行文件。

这是我的开发环境:

  • Windows 10 专业版 64 位
  • 最新更新的 Visual Studio 2017 Professional
  • 面向 .NET Core 2.1

为了测试部署过程,我创建了一个简单的“hello world”.NET Core 控制台应用程序。我按照steps on the official MSDN website 将应用程序作为自包含部署包部署到Visual Studio 中的Mac OS,但在已发布的目标目录中没有看到.dmg 文件。我只看到.dll 文件和其他与项目相关的文件。我还尝试通过发出以下命令,通过 .NET Core CLI 作为自包含部署包发布到 Mac OS,但这仍然没有生成 .dmg 可执行文件:

dotnet publish -c Release --self-contained -r osx-x64

我也试过了:

dotnet publish -c Release --self-contained -r osx.10.13-x64

如何创建.dmg 可执行文件?

谢谢。

【问题讨论】:

  • 我无法回答直接的问题,但我对您的想法进行了更正:.dmg 文件不是可执行文件,它是一种容器格式,有点像.zip 或者 .iso。它用于在分发/传输/存储/等时保护实际的可执行文件(或安装程序包,或其他)。

标签: macos deployment dmg .net-core-2.1


【解决方案1】:

.dmg 不是可执行文件,它是磁盘映像(正如 Gordon 所写,类似于 .iso)。它可用于分发软件,我不希望您的工具输出 .dmg(Apple 自己的开发工具也不会)。

在这种情况下,“自包含部署”包意味着 .NET 运行时静态链接在可执行文件中,因此最终用户不需要安装 .NET 运行时(以增加二进制文件大小为代价)。见self-contained. NET core applications

您的构建应该生成一个 MACH 二进制文件(可能与您的项目同名,没有任何扩展名)。您可以按照自己喜欢的方式分发此二进制文件,包括使用 .dmg。您可以使用hdiutil 来创建和操作 Apple 磁盘映像。

【讨论】:

  • 很好解释。我确实在发布目录中看到了没有扩展名的 elf 文件。这是部署方法生成的 Mac 的实际可执行文件吗?我是否只是重命名此文件以附加 .app 扩展名,然后使用此文件通过 hdiutil 创建 .dmg 图像?
  • 没有。 .app 是各种文件(可执行文件、资源等)的“包”。见developer.apple.com/library/archive/documentation/…。您没有理由不能为可执行文件创建 .app,但您需要创建正确的结构。
  • 小修正:macOS 使用Mach-O 格式的可执行文件,而不是精灵。
  • 谢谢,修复@GordonDavisson
猜你喜欢
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 2016-09-14
  • 2016-12-27
  • 2010-09-10
  • 1970-01-01
相关资源
最近更新 更多