.NET Core 2.0應用程式減小體積瘦身官方工具 IL Linker。 IL Linker 來源於mono的linker https://github.com/mono/linker,目前還是預覽版本。 在一般的情況下,鏈接器可以將應用程式的大小減少50%,大型應用程式的大小可能更有利,鏈接器 ...
.NET Core 2.0應用程式減小體積瘦身官方工具 IL Linker。
IL Linker 來源於mono的linker https://github.com/mono/linker,目前還是預覽版本。
在一般的情況下,鏈接器可以將應用程式的大小減少50%,大型應用程式的大小可能更有利,鏈接器會刪除應用程式中的代碼和依賴庫,而這些代碼不會被任何代碼路徑訪問。它實際上是應用程式特定的無效代碼分析。
下麵正式開始體驗
版本必須為.NET Core 2.0
新建應用
新建一個控制台應用
dotnet new console -o linkdemo
然後添加nuget.config
dotnet new nuget
接著在config 中加入 <add key="dotnet-core" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" /> 如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <!--LineZero --> <clear /> <add key="dotnet-core" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" /> </packageSources> </configuration>
添加ILLink 程式包
dotnet add package ILLink.Tasks -v 0.1.4-preview-906439
最新版本可以到https://dotnet.myget.org/feed/dotnet-core/package/nuget/Illink.Tasks 查看
發佈程式
dotnet publish -c release -r <RID> -o out
- <RID> 以下值可用
win-x64
,win-x86
,linux-x64
,osx-x64
win10 包含linker的發佈
dotnet publish -c release -r win10-x64 -o linker
不包含linker
dotnet publish -c release -r win10-x64 -o nolinker /p:LinkDuringPublish=false
都可以成功執行。
我們看看體積大小。
基本上減小50%以上,文件減少2/3 。
/p:LinkDuringPublish=false
- 禁用鏈接器。/p:ShowLinkerSizeComparison=true
- 顯示應用程式大小縮小的列表。
顯示程式縮小列表
dotnet publish -c release -r win10-x64 -o linker /p:ShowLinkerSizeComparison=true
真正意義上的.NET Core 瘦身。
註意事項:
- 目前只支持發佈獨立部署應用程式。需要指定運行時ID。
- 它目前是一個實驗功能。我們打算在隨後的.NET Core版本中進行支持。
- 鏈接僅在發佈時發生,因此鏈接的應用程式需要在發佈後進行測試,而不僅僅是在構建之後。
- 鏈接器將會破壞使用反射的一些應用程式。請參閱使用IL Linker高級功能。
參考文檔:https://github.com/dotnet/core/blob/master/samples/linker-instructions.md