.NET Core 3.0 构建和部署
Default Executables?默認(rèn)可執(zhí)行文件?
在?dotnet build?或?dotnet publish?期間,將創(chuàng)建一個(gè)與你使用的?SDK?的環(huán)境和平臺(tái)相匹配的可執(zhí)行文件。?和其他本機(jī)可執(zhí)行文件一樣,可以使用這些可執(zhí)行文件執(zhí)行相同操作,例如:??
可以雙擊可執(zhí)行文件。??
可以直接從命令提示符啟用應(yīng)用程序,如?Windows?上的?myapp.exe,以及?Linux?和?macOS?上的?./myapp。?
?
下面是一個(gè)基于.NET Core 2.2的項(xiàng)目:?
?
當(dāng)我Build該項(xiàng)目之后,在bin/Debug/netcoreapp2.2目錄下有這些文件:?
這里沒(méi)有.exe文件。?
?
下面是一個(gè).NET Core 3.0的項(xiàng)目:?
?
當(dāng)我build項(xiàng)目后,bin/Debug/netcoreapp3.0目錄下有這些文件:?
值得注意的就是,這里有一個(gè)exe文件,點(diǎn)擊它可以直接運(yùn)行該項(xiàng)目。?
而且這個(gè)exe文件的大小也很小,這是因?yàn)樗蕾囉?span id="ze8trgl8bvbq" class="TextRun SCXO23393588 BCX0">.NET Core運(yùn)行時(shí),它所需要的依賴項(xiàng)在我電腦上是全局可用的。?
還有另外一個(gè)地方也值得注意,項(xiàng)目所有的依賴也都復(fù)制到了這個(gè)輸出的文件夾里。?
?
Single-file Executables?單文件可執(zhí)行文件?
這種部署方式很方便,、。dotnet publish?命令支持將應(yīng)用打包為特定于平臺(tái)的單文件可執(zhí)行文件。?該可執(zhí)行文件是自解壓縮文件,包含運(yùn)行應(yīng)用所需的所有依賴項(xiàng)(包括本機(jī)依賴項(xiàng))。?首次運(yùn)行應(yīng)用時(shí),應(yīng)用程序?qū)⒏鶕?jù)應(yīng)用名稱(chēng)和生成標(biāo)識(shí)符自解壓縮到一個(gè)目錄中。?再次運(yùn)行應(yīng)用程序時(shí),啟動(dòng)速度將變快。?除非使用了新版本,否則應(yīng)用程序無(wú)需再次進(jìn)行自解壓縮。?
?
下面針對(duì)這個(gè).NET Core 3.0的項(xiàng)目,我們修改一下項(xiàng)目屬性,來(lái)實(shí)現(xiàn)Single-file Executables部署:?
?
build的話不會(huì)起作用,這個(gè)功能僅支持發(fā)布(publish):?
?
看一下輸出文件夾:?
實(shí)際上這里只有一個(gè)exe文件,沒(méi)有其它dll文件,而且這個(gè)exe文件很大,因?yàn)檫@里面包含了它需要的所有依賴。?
?
Assembly linking?程序集鏈接
目前這個(gè)exe有點(diǎn)大,.NET core 3.0 SDK?隨附了一種工具,可以通過(guò)分析?IL?并剪裁未使用的程序集來(lái)減小應(yīng)用的大小。?
自包含應(yīng)用包括運(yùn)行代碼所需的所有內(nèi)容,而無(wú)需在主計(jì)算機(jī)上安裝?.NET。?但是,很多時(shí)候應(yīng)用只需要一小部分框架即可運(yùn)行,并且可以刪除其他未使用的庫(kù)。?
?.NET Core?現(xiàn)在包含一個(gè)設(shè)置,將使用?IL?鏈接器工具掃描應(yīng)用的?IL。?此工具將檢測(cè)哪些代碼是必需的,然后剪裁未使用的庫(kù)。?此工具可以顯著減少某些應(yīng)用的部署大小。?
?
要啟用此工具,請(qǐng)使用項(xiàng)目中的?<PublishTrimmed>?設(shè)置并發(fā)布自包含應(yīng)用:?
?
再次發(fā)布后:?
可以看到exe文件的大小減小了很多,這是因?yàn)檫@里只包含了這個(gè)項(xiàng)目真正用到的依賴。?
?
但是啟用這個(gè)特性的時(shí)候一定要注意,如果項(xiàng)目使用到了反射或相關(guān)動(dòng)態(tài)功能(例如?ASP.NET Core?和?WPF),那么通常會(huì)在剪裁時(shí)損壞。?發(fā)生此損壞是因?yàn)殒溄悠鞑恢来藙?dòng)態(tài)行為,并且不能確定反射需要哪些框架類(lèi)型。?可配置?IL?鏈接器工具以發(fā)現(xiàn)這種情況。??
最重要的是,剪裁后務(wù)必對(duì)應(yīng)用進(jìn)行測(cè)試。?
?
ReadyToRun?鏡像?
可以通過(guò)將應(yīng)用程序集編譯為?ReadyToRun (R2R)?格式來(lái)改進(jìn).NET Core?應(yīng)用程序的啟動(dòng)時(shí)間。?
?
?
這里首先把注釋掉<PublishTrimmed>,然后添加<PublishReadyToRun>:?
?
發(fā)布:?
發(fā)布后會(huì)得到一個(gè)稍微大一點(diǎn)的exe文件,這是因?yàn)槔锩姘嗽a和IL(中間語(yǔ)言)版的程序。?
更詳細(xì)內(nèi)容請(qǐng)查看原文鏈接。
總結(jié)
以上是生活随笔為你收集整理的.NET Core 3.0 构建和部署的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
                            
                        - 上一篇: .NET Core 3.0 一个 jwt
 - 下一篇: 为什么我会了SOA,你们还要逼我学微服务