web-dev-qa-db-ja.com

osxで.netコア2.0コンソールアプリケーションを配布する方法

私は使っている 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のような言葉は、これが必要な方法だと私に思わせます。

これらの2つのリンクは、私が主に情報を取得している場所です。

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

13
Adam Venturella

それでも、実行可能ファイル「MyApp」は真に独立したバイナリではないという彼の最初の観察に戻ります。そのバイナリを別のディレクトリに移動すると、MyApp.dllが見つからないと文句を言います。

具体的には、使用したコマンドは次のとおりです。

dotnet new console
dotnet publish -c Release --runtime osx.10.12-x64 --self-contained true

同じ問題があります。私の「MyApp」は実際には自己完結型のアプリではありません。実際、「MyApp」には、それが存在するディレクトリ内に少なくとも次のファイルが必要であることがわかりました。

MyStatic     ----> my 'exe'                   
MyStatic.dll                    
libhostpolicy.dylib
MyStatic.deps.json              
MyStatic.runtimeconfig.dev.json

自己完結型のバイナリは、スタンドアロンで実行するためにこのすべてのジャンクを必要とすべきではありません。

0
J Freyensee