2017-10-19 142 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/瞭解更多信息。

相關問題