web-dev-qa-db-ja.com

.NET Core 2 MVC WebアプリをEXEにコンパイルする方法は?

Visual Studio2017でKestrelスタンドアロン.exe DotNetCore 2.0 MVC Web APIアプリケーションを作成したいのですが、ドキュメントが見つかりません。自己完結型の.exeとしてコンパイルする方法について(dotnet runを使用しない)。

ここにあるMicrosoftのドキュメント: https://docs.Microsoft.com/en-us/dotnet/articles/core/deploying/deploy-with-vs は、コンソールアプリケーションのみを対象としており、 .csprojは違いを生まない

<RuntimeIdentifiers>win10-x64</RuntimeIdentifiers>

(これは.NET Core 1.xの質問ではないことに注意してください)

6
user613326

dotnet publish コマンドは、デプロイ可能な.NetCoreアプリケーションのパッキングを担当します。アプリケーションをビルドし、そのすべての依存関係を出力ディレクトリにコピーします。

それを実行する最も簡単な方法は、プロジェクトディレクトリ(csprojが存在するディレクトリ)に切り替えて実行することです。

dotnet publish --configuration Release --runtime win-x64

必要に応じて、ビルド構成とランタイムバージョンを変更します。私が参照したドキュメントで他のコマンドライン設定を学ぶことができます。

9
CodeFuller

この回答 によると:

現時点では、single実行可能ファイルを作成するためのフェイルセーフメソッドはありません。型転送dllファイルが多数含まれているため、ILMergeや同様のツールでも正しい結果が得られない場合があります(これは改善される可能性がありますが、問題は、これらのシナリオが、特に実稼働アプリケーションで広範なテストを受けていないことです)。

現在、.NETCoreアプリケーションを展開する方法は2つあります。

  • "ポータブルアプリケーション"/"フレームワーク依存アプリケーション" として、ターゲットマシンにdotnet実行可能ファイルとインストール済みフレームワークが必要です。ここで、XYZ.runtimeconfig.jsonは、使用するフレームワークのバージョンを決定するために使用され、ランタイムパラメータも指定します。この展開モデルでは、さまざまなプラットフォーム(Windows、Linux、Mac)で同じコードを実行できます。
  • "自己完結型アプリケーション" として:ここでは、ランタイム全体が公開された出力に含まれ、実行可能ファイルが生成されます(例:yourapp.exe)。この出力はプラットフォーム(ランタイム識別子を介して設定)に固有であり、対象のオペレーティングシステムでのみ実行できます。ただし、生成された実行可能ファイルは、ランタイムを起動してアプリのメインdllファイルをロードする小さなシムにすぎません。これにより、XYZ.runtimeconfig.jsonがガベージコレクション設定などの追加のランタイムプロパティを設定することもできます(「新しい」app.configファイルと考えてください)。

将来的には、 CoreRTランタイム –これは執筆時点でまだ開発中です–ランタイムに固有で、他のファイルを必要としない単一のコンパイル済みネイティブ実行可能ファイルを作成できるようにすることを目的としています。 。

その質問は6か月以上前に(本当にあなたから)尋ねられましたが、CoreRTはまだ進行中のようです。

自己完結型デプロイメントの長所と短所

自己完結型デプロイメントのデプロイには、2つの大きな利点があります。

  • アプリとともにデプロイされる.NETCoreのバージョンを単独で制御できます。 .NET Coreのサービスは、お客様のみが行うことができます。

  • 実行する.NETCoreのバージョンを提供しているため、ターゲットシステムで.NETCoreアプリを実行できることが保証されます。

また、いくつかの欠点があります。

  • .NET Coreはデプロイメントパッケージに含まれているため、デプロイメントパッケージをビルドするターゲットプラットフォームを事前に選択する必要があります。

  • .NET Coreだけでなく、アプリとそのサードパーティの依存関係も含める必要があるため、デプロイメントパッケージのサイズは比較的大きくなります。

  • 多数の自己完結型の.NETCoreアプリをシステムにデプロイすると、各アプリが.NET Coreファイルを複製するため、大量のディスク領域を消費する可能性があります。

Microsoft展開ドキュメント であることがすでにわかっていると思いますが、 コマンドライン および Visual Studio 展開のウォークスルーを実行すると、次のことに気付くでしょう。手順でdotnetpublishを使用するように指示されています。 コンソールアプリケーション として展開できるため、これはASP.NETCoreアプリケーションの場合とまったく同じです。

要するに、.exeファイルを使用して自己完結型のデプロイメントパッケージを作成することは可能ですが、それは[〜#〜] not [〜#〜](まだ)自己完結型EXE。NETCore上。

5
NightOwl888