2017-10-19 141 views
4

我正在使用​​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' 

现在,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

回答

3

您有关于buildpublish之间的差异正确的直觉。

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/了解更多信息。

相关问题