gpt4 book ai didi

macos - 如何在 osx 上分发 .net core 2.0 控制台应用程序

转载 作者:行者123 更新时间:2023-12-03 23:42:35 25 4
gpt4 key购买 nike

我正在使用 Visual Studio for Mac ,我的应用程序写好了,它做我想做的事。用户的目标平台是 OSX。它依赖于 2 个具有自己依赖项的 Nuget 包,特别是:

  • NetMQ
  • Microsoft.Extensions.Configuration.CommandLine

  • 我对 build 运行以下命令应用程序:
    dotnet build -c Release -r osx.10.11-x64

    输出告诉我它成功了,并向我展示了它把文件放在哪里。

    该文件夹中包含以下文件,我假设该文件夹是我分发给我的用户的文件夹,但这会导致错误,因此出现这个问题:
    MyApp <---- executable
    MyApp.deps.json
    MyApp.dll
    MyApp.pdb
    MyApp.runtimeconfig.dev.json
    MyApp.runtimeconfig.json
    libhostfxr.dylib
    libhostpolicy.dylib

    所以我的用户收到了这个,他们有 dotnet运行时安装。当他们去运行可执行文件(这里 MyApp aka ./MyApp )时,他们收到以下错误:
    An assembly specified in the application dependencies manifest (MyApp.deps.json) was not found:
    package: 'AsyncIO', version: '0.1.26'
    path: 'lib/netstandard1.3/AsyncIO.dll'

    现在, AsyncIONetMQ 的依赖项这就是它的来源。但是,我可以 ./MyApp从我的文件系统上的任何地方,它都可以工作。所以我认为作为开发系统安装在我的系统上的 Nuget 包仍然可以访问,而在新用户的系统上则不是。我还没有真正找到任何与 Mac 分发相关的文档。我现在唯一能想到的就是分发项目文件并指示用户运行:
    dotnet run -p MyApp.csproj

    如果我理解正确,它将安装 nuget 包。

    我也可以让用户使用:
    dotnet MyApp.dll

    我在谷歌搜索中看到过这种形式。不过,这引发了他们的疑问,为什么会生成可执行文件。乞丐不能挑剔,如果这样做的话 dotnet <dll>我很高兴,我只需要让它运行。

    一定有我在这里遗漏的东西,否则 netcore2.0 应用程序的这个细节、分布被忽略了?

    在挖掘更多内容时,这似乎也是一个有用的命令:
    dotnet publish -c Release --framework netcoreapp2.0 --runtime osx.10.11-x64

    这还添加了所有类型的 DLL 和所有依赖项 DLL。像 publish这样的词让我觉得这是需要走的路。

    这两个链接是我主要获取信息的地方:

    https://docs.microsoft.com/en-us/dotnet/core/deploying/deploy-with-cli
    https://docs.microsoft.com/en-us/dotnet/core/tools/project-json-to-csproj

    最佳答案

    您对 build 之间的区别有正确的直觉和 publish .
    dotnet build将为本地开发构建应用程序。一方面是构建将假定所有依赖项都可通过本地 nuget 缓存获得。
    dotnet publish将构建应用程序以部署到其他机器。这明确地处理依赖关系。

    有两种 Release模式:独立部署和依赖框架的部署。

    依赖于框架的部署 依靠系统上已有的框架来工作。如果您在此模式下发布您的应用程序,您将只包含您的应用程序及其依赖项。

    要在 FDD 中发布,请使用:

    dotnet publish -c Release --framework netcoreapp2.0

    独立部署 相比之下,将包括整个 .NET Core 运行时和您的应用程序及其依赖项。

    要发布 SCD,请使用:
    dotnet publish -c Release --framework netcoreapp2.0 --runtime osx-x64

    (顺便说一句,请使用更通用的 osx-x64 而不是非常具体的 osx.10.11-x64 )

    您是否看到两种 Release模式之间的区别?这只是运行时 ID 的存在/不存在。在您的示例中,当您使用 --runtime 时标志,您要求将您的应用程序发布为 SCD,最终也包括所有 .NET Core 运行时。把它放在外面,你应该得到你所期望的。

    当您将应用程序发布为 FDD 时,您应该会看到一个名为 bin/Release/netcoreapp2.0/publish 的目录。在你的源代码中。使用该目录(而不是 bin/Release/netcoreapp2.0/ )作为您的发布存档。您的用户应该运行 dotnet ./path/to/publish/MyApp.dll .

    看看 https://docs.microsoft.com/en-us/dotnet/core/deploying/想要查询更多的信息。

    关于macos - 如何在 osx 上分发 .net core 2.0 控制台应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46829860/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com