.NET Core 3.0 构建和部署
Default Executables?默認可執行文件?
在?dotnet build?或?dotnet publish?期間,將創建一個與你使用的?SDK?的環境和平臺相匹配的可執行文件。?和其他本機可執行文件一樣,可以使用這些可執行文件執行相同操作,例如:??
可以雙擊可執行文件。??
可以直接從命令提示符啟用應用程序,如?Windows?上的?myapp.exe,以及?Linux?和?macOS?上的?./myapp。?
?
下面是一個基于.NET Core 2.2的項目:?
?
當我Build該項目之后,在bin/Debug/netcoreapp2.2目錄下有這些文件:?
這里沒有.exe文件。?
?
下面是一個.NET Core 3.0的項目:?
?
當我build項目后,bin/Debug/netcoreapp3.0目錄下有這些文件:?
值得注意的就是,這里有一個exe文件,點擊它可以直接運行該項目。?
而且這個exe文件的大小也很小,這是因為它依賴于.NET Core運行時,它所需要的依賴項在我電腦上是全局可用的。?
還有另外一個地方也值得注意,項目所有的依賴也都復制到了這個輸出的文件夾里。?
?
Single-file Executables?單文件可執行文件?
這種部署方式很方便,、。dotnet publish?命令支持將應用打包為特定于平臺的單文件可執行文件。?該可執行文件是自解壓縮文件,包含運行應用所需的所有依賴項(包括本機依賴項)。?首次運行應用時,應用程序將根據應用名稱和生成標識符自解壓縮到一個目錄中。?再次運行應用程序時,啟動速度將變快。?除非使用了新版本,否則應用程序無需再次進行自解壓縮。?
?
下面針對這個.NET Core 3.0的項目,我們修改一下項目屬性,來實現Single-file Executables部署:?
?
build的話不會起作用,這個功能僅支持發布(publish):?
?
看一下輸出文件夾:?
實際上這里只有一個exe文件,沒有其它dll文件,而且這個exe文件很大,因為這里面包含了它需要的所有依賴。?
?
Assembly linking?程序集鏈接
目前這個exe有點大,.NET core 3.0 SDK?隨附了一種工具,可以通過分析?IL?并剪裁未使用的程序集來減小應用的大小。?
自包含應用包括運行代碼所需的所有內容,而無需在主計算機上安裝?.NET。?但是,很多時候應用只需要一小部分框架即可運行,并且可以刪除其他未使用的庫。?
?.NET Core?現在包含一個設置,將使用?IL?鏈接器工具掃描應用的?IL。?此工具將檢測哪些代碼是必需的,然后剪裁未使用的庫。?此工具可以顯著減少某些應用的部署大小。?
?
要啟用此工具,請使用項目中的?<PublishTrimmed>?設置并發布自包含應用:?
?
再次發布后:?
可以看到exe文件的大小減小了很多,這是因為這里只包含了這個項目真正用到的依賴。?
?
但是啟用這個特性的時候一定要注意,如果項目使用到了反射或相關動態功能(例如?ASP.NET Core?和?WPF),那么通常會在剪裁時損壞。?發生此損壞是因為鏈接器不知道此動態行為,并且不能確定反射需要哪些框架類型。?可配置?IL?鏈接器工具以發現這種情況。??
最重要的是,剪裁后務必對應用進行測試。?
?
ReadyToRun?鏡像?
可以通過將應用程序集編譯為?ReadyToRun (R2R)?格式來改進.NET Core?應用程序的啟動時間。?
?
?
這里首先把注釋掉<PublishTrimmed>,然后添加<PublishReadyToRun>:?
?
發布:?
發布后會得到一個稍微大一點的exe文件,這是因為里面包含了原生代碼和IL(中間語言)版的程序。?
更詳細內容請查看原文鏈接。
總結
以上是生活随笔為你收集整理的.NET Core 3.0 构建和部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core 3.0 一个 jwt
- 下一篇: asp.net ajax控件工具集 Au