如何在osx上分发.net core 2.0控制台应用程序
我正在使用3210,我的应用程序已编写,它按照我的需要进行操作。用户的目标平台是OSX。它依赖于2个的NuGet包与自己的依赖,特别是:如何在osx上分发.net core 2.0控制台应用程序
- 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
又名./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'
现在,AsyncIO
是NetMQ
的依赖性因此,这就是那是来自。但是,我可以在我的文件系统上的任何地方使用./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
将生成部署到其他机器的应用程序。这明确处理依赖关系。
有两种发布模式:自包含的部署和依赖于框架的部署。
依赖框架的部署依靠系统上已经存在的框架工作。如果您以这种模式发布应用程序,则只会包含应用程序及其依赖项。
要在FDD,使用发布:
dotnet publish -c Release --framework netcoreapp2.0
自containted部署,相反,将包括整个.NET核心运行时和您的应用程序和它的依赖。
要发布SCD,使用:
dotnet publish -c Release --framework netcoreapp2.0 --runtime osx-x64
(顺便说一下,请不要使用更为普遍osx-x64
,而不是非常具体osx.10.11-x64
)
你看到出版的两种模式之间的区别?这只是运行时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/了解更多信息。