Default Executables?默認可執(zhí)行文件?

          在?dotnet build?或?dotnet publish?期間,將創(chuàng)建一個與你使用的?SDK?的環(huán)境和平臺相匹配的可執(zhí)行文件。?
          和其他本機可執(zhí)行文件一樣,可以使用這些可執(zhí)行文件執(zhí)行相同操作,例如:??

          *
          可以雙擊可執(zhí)行文件。??

          *
          可以直接從命令提示符啟用應用程序,如?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?單文件可執(zhí)行文件?

          這種部署方式很方便,、。dotnet publish?命令支持將應用打包為特定于平臺的單文件可執(zhí)行文件。?
          該可執(zhí)行文件是自解壓縮文件,包含運行應用所需的所有依賴項(包括本機依賴項)。?首次運行應用時,應用程序?qū)⒏鶕?jù)應用名稱和生成標識符自解壓縮到一個目錄中。?
          再次運行應用程序時,啟動速度將變快。?除非使用了新版本,否則應用程序無需再次進行自解壓縮。?

          ?

          下面針對這個.NET Core 3.0的項目,我們修改一下項目屬性,來實現(xiàn)Single-file Executables部署:?

          ?

          build的話不會起作用,這個功能僅支持發(fā)布(publish):?

          ?

          看一下輸出文件夾:?

          實際上這里只有一個exe文件,沒有其它dll文件,而且這個exe文件很大,因為這里面包含了它需要的所有依賴。?

          ?

          Assembly linking?程序集鏈接

          目前這個exe有點大,.NET core 3.0 SDK?隨附了一種工具,可以通過分析?IL?并剪裁未使用的程序集來減小應用的大小。?

          自包含應用包括運行代碼所需的所有內(nèi)容,而無需在主計算機上安裝?.NET。?但是,很多時候應用只需要一小部分框架即可運行,并且可以刪除其他未使用的庫。?

          ?.NET Core?現(xiàn)在包含一個設置,將使用?IL?鏈接器工具掃描應用的?IL。?此工具將檢測哪些代碼是必需的,然后剪裁未使用的庫。?
          此工具可以顯著減少某些應用的部署大小。?

          ?

          要啟用此工具,請使用項目中的?<PublishTrimmed>?設置并發(fā)布自包含應用:?

          ?

          再次發(fā)布后:?

          可以看到exe文件的大小減小了很多,這是因為這里只包含了這個項目真正用到的依賴。?

          ?

          但是啟用這個特性的時候一定要注意,如果項目使用到了反射或相關動態(tài)功能(例如?ASP.NET Core?和?WPF),那么通常會在剪裁時損壞。?
          發(fā)生此損壞是因為鏈接器不知道此動態(tài)行為,并且不能確定反射需要哪些框架類型。?可配置?IL?鏈接器工具以發(fā)現(xiàn)這種情況。??

          最重要的是,剪裁后務必對應用進行測試。?

          ?

          ReadyToRun?鏡像?

          可以通過將應用程序集編譯為?ReadyToRun (R2R)?格式來改進.NET Core?應用程序的啟動時間。?

          R2R?是一種預先?(AOT)?編譯形式。?R2R?二進制文件通過減少應用程序加載時實時?(JIT)?編譯器需要執(zhí)行的工作量來改進啟動性能。?二進制文件包含與
          ?JIT?將生成的內(nèi)容類似的本機代碼。?但是,R2R?二進制文件更大,因為它們包含中間語言?(IL)?代碼(某些情況下仍需要此代碼)和相同代碼的本機版本。?
          僅當發(fā)布面向特定運行時環(huán)境?(RID)(如?Linux x64?或?Windows x64)的自包含應用時?R2R?才可用。?

          ?

          這里首先把注釋掉<PublishTrimmed>,然后添加<PublishReadyToRun>:?

          ?

          發(fā)布:?

          發(fā)布后會得到一個稍微大一點的exe文件,這是因為里面包含了原生代碼和IL(中間語言)版的程序。?

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點信息
          問題反饋
          郵箱:[email protected]
          QQ群:637538335
          關注微信

                男女啪啪免费体验区 | 91福利导航 | wwwA片 | 亚洲精品一区二区三区影院忠贞 | 人妻无码系列 |