Asp.net-Mvc

如何將 .NET Core 2 MVC Web 應用程序編譯為 EXE?

  • November 3, 2019

我想在 Visual Studio 2017 中創建 Kestrel 獨立.exeDotNetCore 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 問題)

dotnet publish命令負責打包可部署的 .Net Core 應用程序。它將建構應用程序並將其所有依賴項複製到輸出目錄。

執行它最簡單的方法是切換到項目目錄(csproj所在的目錄)並執行:

dotnet 發布 –configuration 發布 –runtime win-x64

根據您的需要更改建構配置和執行時版本。您可以在我引用的文件中了解其他命令行設置。

根據這個答案

目前,沒有創建單個執行檔的故障安全方法。由於涉及到很多類型轉發 dll 文件,即使是 ILMerge 和類似工具也可能不會產生正確的結果(儘管這可能會有所改善,但問題是這些場景沒有經過廣泛的測試,尤其是在生產應用程序中)

目前有兩種部署 .NET Core 應用程序的方法:

  • 作為“攜帶式應用程序”/“依賴框架的應用程序”,需要dotnet在目標機器上安裝可執行的框架。在這裡,XYZ.runtimeconfig.json用於確定要使用的框架版本並指定執行時參數。這種部署模型允許在各種平台(windows、linux、mac)上執行相同的程式碼
  • 作為“自包含應用程序”:這裡整個執行時都包含在發布的輸出中,並生成一個執行檔(例如yourapp.exe)。此輸出特定於平台(通過執行時標識符設置)並且只能在目標作業系統上執行。但是,生成的執行檔只是啟動執行時並載入應用程序的主 dll 文件的一個小 shim。這還允許XYZ.runtimeconfig.json設置其他執行時屬性,例如垃圾收集設​​置。(將其視為“新”app.config文件)

未來,CoreRT 執行時(在撰寫本文時仍處於開發階段)旨在允許創建單個預編譯的本機執行檔,該執行檔特定於執行時並且不需要任何其他文件。

儘管這個問題是在 6 個多月前提出的(確實是你的問題),但看起來 CoreRT 仍在進行中。

自包含部署的優缺點

部署自包含部署有兩個主要優點:

  • 您可以完全控制與您的應用一起部署的 .NET Core 版本。.NET Core 只能由您提供服務。
  • 您可以放心,目標系統可以執行您的 .NET Core 應用程序,因為您提供了它將執行的 .NET Core 版本。

它也有許多缺點:

  • 由於 .NET Core 包含在您的部署包中,因此您必須提前選擇要為其建構部署包的目標平台。
  • 您的部署包的大小相對較大,因為您必須包含 .NET Core 以及您的應用程序及其第三方依賴項。
  • 將大量獨立的 .NET Core 應用程序部署到系統可能會消耗大量磁碟空間,因為每個應用程序都會複製 .NET Core 文件。

我知道您已經找到了Microsoft 部署文件,但是如果您通過命令行Visual Studio部署的演練,您會注意到他們告訴您在過程中使用dotnet publish。這與 ASP.NET Core 應用程序完全相同,因為它們可以部署為控制台應用程序

簡而言之,可以使用文件製作自包含的部署.exe,但(還)不可能在 .NET Core 上製作包含的 EXE 。

引用自:https://stackoverflow.com/questions/48217713