.NET Core 3.0 構建和部署

Default Executables 默承認執行文件 

 dotnet build  dotnet publish 期間,將建立一個與你使用的 SDK 的環境和平臺相匹配的可執行文件。 和其餘本機可執行文件同樣,可使用這些可執行文件執行相同操做,例如:  web

  • 能夠雙擊可執行文件。  json

  • 能夠直接從命令提示符啓用應用程序,如 Windows 上的 myapp.exe,以及 Linux  macOS 上的 ./myapp 併發

 

下面是一個基於.NET Core 2.2的項目: app

Solution 'CgzI.Api' (3 of 3 projects) 
CgzLApi 
Connected Services 
Dependencies 
Properties 
Auth 
Cache 
Controllers 
HealthChecks 
Helpers 
nteffaces 
logs 
Services 
ViewModeIs 
appsettingsjson 
Program.cs 
StartupDeveIopment.cs 
StartupProduction.cs

 

當我Build該項目以後,在bin/Debug/netcoreapp2.2目錄下有這些文件: 框架

s PC Important (D:) Projects 
P rope ties 
publish 
appsettings.DeveIopmentjson 
appsettings.json 
appsettings.Production.json 
CgzI.Api.depsjson 
CgzI.Api.dII 
CgzI.Api.pdb 
CgzI.Api.runtimeconfig.devjson 
CgzI.Api.runtimeconfigjson 
CgzI.Core.dII 
CgzI.Core.pdb 
Cgzl.lnfrastructure.dll 
Cgzl.lnfrastructure.pdb 
dot net 
Cgzl CgzI.Api 
Date modified 
10/27/2019 7:10 PM 
2/7/2019 1012 AM 
6/15/2019357 PM 
2/3/2019 11:13 AM 
2/23/2019 11:33 AM 
10/27/2019 7:10 PM 
10/27/2019 7:10 PM 
10/27/2019 7:10 PM 
10/27/2019 7:10 PM 
10/27/2019 7:10 PM 
10/27/2019 7:10 PM 
10/27/2019 7:10 PM 
10/27/2019 7:10 PM 
10/27/2019 7:10 PM 
CgzI.Api bin Debug 
Type 
File folder 
File folder 
JSON source File 
JSON Source File 
JSON source File 
JSON source File 
Application exten... 
Program Debug D... 
JSON source File 
JSON source File 
Application exten... 
Program Debug D... 
Application exten... 
Program Debug D... 
netcorea pp22 
Size 
255 KB 
88 
21 KB 
25 KB 
81 KB 
15 KB

這裏沒有.exe文件。 工具

 

下面是一個.NET Core 3.0的項目: 性能

Solution 'Recruit' (3 of 3 projects) 
Recruit.Api 
Connected Services 
Dependencies 
Properties 
Controllers 
Helpers 
Services 
ViewModeIs 
appsettings.json 
a Program.cs 
Recruit.db 
a Startup.cs

 

當我build項目後,bin/Debug/netcoreapp3.0目錄下有這些文件: 測試

s PC 
Important (D:) 
P rope ties 
runtimes 
Projects 
dotnet 
Recruit Recruit.Api 
Date modified 
10/27/2019 7:12 PM 
9/21/2019 11:35 AM 
9/21/2019 11:27 AM 
9/21/2019 11:27 AM 
9/21/2019 1:54 PM 
7/11/2019&38 PM 
8/12/2019 1242 PM 
8/12/2019 1:19 PM 
3/4/2019 402 AM 
3/4/2019 407 AM 
9/7/2019 1•41 AM 
7:51 PM 
9/7/2019 1•41 AM 
9/7/2019 AM 
9/7/2019 AM 
9/7/2019 AM 
9/7/2019 AM 
7:51 PM 
10/24/2018 648 PM 
11/27/2018 11:10 PM 
11/27/2018607 PM 
10/27/2019 7:12 PM 
10/27/2019 7:12 PM 
10/27/2019 7:12 PM 
10/27/2019 7:12 PM 
10/27/2019 7:12 PM 
10/27/2019 7:12 PM 
10/27/2019 7:12 PM 
10/27/2019 7:12 PM 
bin Debug 
Type 
File folder 
File folder 
netcoreap p3.O 
appsettings.DeveIopmentjson 
appsettings.json 
appsettings.Productionjson 
ArdaIis.GuardCIauses.dII 
AutoMapper.dII 
AutoMapper.Extensions.Microsoft.Depen... 
Microsoft.AspNetCoreJsonPatch.dII 
Microsoft.AspNetCore.Mvc.NewtonsoftJ... 
Microsoft.Data.SqIite.dII 
Microsoft.DotNet.PIatformAbstractions.dII 
Microsoft.EntityFramevMkCore.Abstract... 
Microsoft.EntityFrameworkCore.Design.dII 
Microsoft.EntityFrameworkCore.dII 
Microsoft.EntityFramewn•rkCore.ReIation... 
Microsoft.EntityFrameworkCoreSqIite.dII 
Microsoft.Extensions.DependencyModeI.... 
Microsoft.OpenApi.dII 
Newtonsoft.Json.8son.dII 
Newtonsoft.Json.dII 
Recruit.Api.depsjson 
RecruitApi.dII 
Recruit.Api.exe 
Recruit.Api.pdb 
Recruit.Api.runtimeconfig.devjson 
Recruit.Api.runtimeconfigjson 
Recruit.Core.dII 
Recruit.Core.pdb 
JSON source File 
JSON source File 
JSON source File 
Application exten... 
Application exten... 
Application exten... 
Application exten... 
Application exten... 
Application exten... 
Application exten... 
Application exten... 
Application exten... 
Application exten... 
Application exten... 
Application exten... 
Application exten... 
Application exten... 
Application exten... 
Application exten... 
JSON source File 
Application exten... 
Application 
Program Debug D... 
JSON source File 
JSON source File 
Application exten... 
Program Debug 
Size 
282 KB 
12 KB 
52 
144 KB 
24 KB 
21 KB 
238 KB 
1,488 KB 
784 KB 
125 KB 
67 KB 
161 KB 
96 
654 KB 
216 KB 
36 
1 56 KB 
10 KB 
17 KB

值得注意的就是,這裏有一個exe文件,點擊它能夠直接運行該項目。 ui

並且這個exe文件的大小也很小,這是由於它依賴於.NET Core運行時,它所須要的依賴項在我電腦上是全局可用的。 spa

還有另一個地方也值得注意,項目全部的依賴也都複製到了這個輸出的文件夾裏。 

 

Single-file Executables 單文件可執行文件 

這種部署方式很方便,、。dotnet publish命令支持將應用打包爲特定於平臺的單文件可執行文件。該可執行文件是自解壓縮文件,包含運行應用所需的全部依賴項(包括本機依賴項)。首次運行應用時,應用程序將根據應用名稱和生成標識符自解壓縮到一個目錄中。再次運行應用程序時,啓動速度將變快。除非使用了新版本,不然應用程序無需再次進行自解壓縮。 

 

下面針對這個.NET Core 3.0的項目,咱們修改一下項目屬性,來實現Single-file Executables部署: 

<PropertyGroup> 
<TargetFramework>netcoreap . q/ Tar 
Framework> 
meldentifier> 
PublishSingleFile> 
PropertyGroup>

 

build的話不會起做用,這個功能僅支持發佈(publish): 

Ove Niew 
Connected Services 
Service References 
Publish 
Deploy your app to a folder, IIS, Azure, or another destination. More info 
FolderProfile 
New Edit Rename Delete 
Summary 
Target Location 
Delete Existing Files 
Configuration 
Publish 
False 
Release

 

看一下輸出文件夾: 

Type 
BON So 
appsettings.DeveIopmentjson 
appsettings.json 
appsettings.Prod 
Recruit.Api.exe 
RecruitApi.pdb 
web.config 
Date modified 
9/21/2019 11:27 AM 
9/21/2019 11:27 AM 
9/21/2019 1:54 PM 
10/27/2019 7:25 PM 
10/27/2019 7:25 PM 
10/27/2019 7:25 PM 
File 
JSON source Fi 
JSON source File 
Application 
Program Debug D... 
Configuration Sou... 
Size 
94,260 KB

實際上這裏只有一個exe文件,沒有其它dll文件,並且這個exe文件很大,由於這裏麪包含了它須要的全部依賴。 

 

Assembly linking 程序集連接

目前這個exe有點大,.NET core 3.0 SDK 隨附了一種工具,能夠經過分析 IL 並剪裁未使用的程序集來減少應用的大小。 

自包含應用包括運行代碼所需的全部內容,而無需在主計算機上安裝 .NET 可是,不少時候應用只須要一小部分框架便可運行,而且能夠刪除其餘未使用的庫。 

 .NET Core 如今包含一個設置,將使用 IL 連接器工具掃描應用的 IL 此工具將檢測哪些代碼是必需的,而後剪裁未使用的庫。 此工具能夠顯著減小某些應用的部署大小。 

 

要啓用此工具,請使用項目中的 <PublishTrimmed> 設置併發布自包含應用: 

<PropertyGroup> 
<TargetFramework>netcoreapp3. getFramework> 
<RuntimeIdentifier>win1Ø-x 4 
ntimeldentifier> 
hSingleFile> 
PublishTrimmed> 
PropertyGroup>

 

再次發佈後: 

ortant (D:) 
Projects 
dot net 
Recruit 
Recruit.Api bin 
Date modified 
9/21/2019 11:27 AM 
9/21/2019 11:27 AM 
9/21/2019 1:54 PM 
10/27/2019 853 PM 
10/27/2019 PM 
10/27/2019 853 PM 
Release netcoreapp3.O 
Type 
Source File 
JSON sou 
JSON source F 
Application 
Program Debug D... 
Configuration Sou... 
publish 
Size 
appsettings.DeveIopmentjson 
appsettingsjson 
appsettings.Production.json 
Recruit.Api.exe 
RecruitApi.pdb 
web.config

能夠看到exe文件的大小減少了不少,這是由於這裏只包含了這個項目真正用到的依賴。 

 

可是啓用這個特性的時候必定要注意,若是項目使用到了反射或相關動態功能(例如 ASP.NET Core  WPF,那麼一般會在剪裁時損壞。 發生此損壞是由於連接器不知道此動態行爲,而且不能肯定反射須要哪些框架類型。 可配置 IL 連接器工具以發現這種狀況。  

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

 

ReadyToRun 鏡像 

能夠經過將應用程序集編譯爲 ReadyToRun (R2R) 格式來改進.NET Core 應用程序的啓動時間。 

R2R 是一種預先 (AOT) 編譯形式。 R2R 二進制文件經過減小應用程序加載時實時 (JIT) 編譯器須要執行的工做量來改進啓動性能。 二進制文件包含與 JIT 將生成的內容相似的本機代碼。 可是,R2R 二進制文件更大,由於它們包含中間語言 (IL) 代碼(某些狀況下仍須要此代碼)和相同代碼的本機版本。 僅當發佈面向特定運行時環境 (RID)(如 Linux x64  Windows x64)的自包含應用時 R2R 纔可用。 

 

這裏首先把註釋掉<PublishTrimmed>,而後添加<PublishReadyToRun> 

<PropertyGroup> 
<TargetFramework>netcoreapp3. Øq/TargetFra 
ork> 
ntifier> 
Publ ishSi 
ile> 
PublishTrimmed> -> 
PublishReadyToRun> 
PropertyGroup>

 

發佈: 

portant (D:) Projects 
dot net 
Recruit 
appsettings.DeveIopmentjson 
appsettings.json 
appsettings.Production.json 
Recruit.Api.exe 
RecruitApi.pdb 
web.config 
Recruit.Api bin 
Date modified 
9/21/2019 11:27 AM 
9/21/2019 11:27 AM 
9/21/2019 1:54 PM 
10/27/2019 PM 
10/27/2019 PM 
10/27/2019 PM 
Release netcoreapp3.O 
Type 
JSON source Fi 
JSON source File 
JSON source File 
Application 
Program Debug D... 
Configuration Sou... 
publish 
Size 
101,065 KB

發佈後會獲得一個稍微大一點的exe文件,這是由於裏面包含了原生代碼和IL(中間語言)版的程序。

相關文章
相關標籤/搜索