.NET Core 3.0 構建和部署


Default Executables 默認可執行文件 

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

  • 可以雙擊可執行文件。  

  • 可以直接從命令提示符啟用應用程序,如 Windows 上的 myapp.exe,以及 Linux  macOS 上的 ./myapp 

 

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

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文件,點擊它可以直接運行該項目。 

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

還有另外一個地方也值得注意,項目所有的依賴也都復制到了這個輸出的文件夾里。 

 

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(中間語言)版的程序。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM