![](/img/trans.png)
[英]How to allow powershell to download an EXE from a .net core MVC web app?
[英]How to compile a .NET Core 2 MVC web app to an EXE?
我想在 Visual Studio 2017 中創建 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 問題)
dotnet publish命令負責打包可部署的 .Net Core 應用程序。 它將構建應用程序並將其所有依賴項復制到輸出目錄。
運行它最簡單的方法是切換到項目目錄(csproj所在的目錄)並執行:
dotnet 發布 --configuration 發布 --runtime win-x64
根據您的需要更改構建配置和運行時版本。 您可以在我參考的文檔中了解其他命令行設置。
根據這個答案:
目前,沒有故障安全方法來創建單個可執行文件。 由於涉及大量類型轉發的dll文件,即使是ILMerge和類似工具也可能無法產生正確的結果(雖然這可能會有所改善,但問題是這些場景沒有經過廣泛的測試,尤其是在生產應用中)
目前有兩種部署 .NET Core 應用程序的方法:
- 作為“便攜式應用程序”/“依賴框架的應用程序” ,需要在目標機器上安裝
dotnet
可執行文件和框架。 此處,XYZ.runtimeconfig.json
用於確定要使用的框架版本並指定運行時參數。 這種部署模型允許在各種平台(windows、linux、mac)上運行相同的代碼- 作為“自包含應用程序” :這里整個運行時都包含在發布的輸出中,並生成一個可執行文件(例如
yourapp.exe
)。 此輸出特定於平台(通過運行時標識符設置)並且只能在目標操作系統上運行。 但是,生成的可執行文件只是一個小墊片,用於啟動運行時並加載應用程序的主 dll 文件。 這也允許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的核心獨立的EXE。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.