【问题标题】:Making a self contained executable for mac为mac制作一个自包含的可执行文件
【发布时间】:2017-04-29 20:02:31
【问题描述】:

我在 Visual Studio 中制作了一个 .net 核心控制台应用程序。我现在想将它打包为适用于 windows 和 mac 的可执行文件。

我将运行时部分添加到 project.json。

这是我的 projects.json,基于我在这里看到的:https://docs.microsoft.com/en-us/dotnet/articles/core/deploying/index#self-contained-application

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true
  },

  "dependencies": {
    "AngleSharp": "0.9.9",
    "CsvHelper": "2.16.3",
    "Microsoft.NETCore.App": {
      "version": "1.0.1"
    }
  },

  "frameworks": {
    "netcoreapp1.0": {
    }
  },
  "runtimes": {
    "win10-x64": {},
    "osx.10.10-x64": {}
  }
}

这会在 debug/release 中创建一个名为 win10-x64 的文件夹,其中包含一个可执行文件,但没有用于 osx 的文件夹。

我是否缺少针对此操作系统的依赖项?

【问题讨论】:

    标签: c# .net .net-core


    【解决方案1】:

    答案是从命令行发布它

    dotnet publish -r osx.10.10-x64
    

    然后文件夹/osx.10.10-x64/publish/ 包含一个文件,该文件可以在安装了 SDK 的 mac 上运行。

    【讨论】:

    • -r 实际上并没有做太多事情,我认为如果您针对每个平台或其他东西进行了配置,它可能会使用一些设置。最终,您将能够使用它将运行时与您的应用程序捆绑到一个特定平台的二进制文件中,但该功能还没有为 1.0 做好准备。我刚刚在我之前为 Windows/Linux 发布的项目中使用了您的命令,它重新发布的唯一文件是 PROJECTNAME.deps.json、PROJECTNAME.runtimeconfig.json 和 web.config,它在我现有的 bin\Debug\ netcoreapp1.0\发布。项目 DLL 本身没有重新编译。
    • 它似乎正在工作。我有一个可以在 Mac 上运行的文件
    【解决方案2】:

    .NET Core 不直接构建可执行文件。虽然这在路线图中,但最后我检查了(1.0.1)它还没有这样做。您将在编译时获得一个 DLL 文件,您可以通过将其传递给 dotnet 二进制文件来运行该文件。不要让 DLL 扩展欺骗您,它适用于任何受支持的平台。

    正如其他人所说,您应该进行发布以确保将所有应用程序文件复制到发布文件夹,以便它们准备好捆绑,但相同的 DLL 文件只是复制到那里。我获取了相同的发布结果,并在 IIS 下的 Windows 和 Kestrel 下的 Red Hat 上运行它们。

    【讨论】:

      猜你喜欢
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 2015-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多