.NET Core 具有【裁剪未使用的程式碼】的功能,但由於它是使用靜態分析來實現的,因此它的裁剪效果並非最理想。它存在以下三個缺點:
不支援 Windows Forms 和 WPF,而實際上對程式裁剪功能需求最強烈的反而是桌面程式的開發者。
無法刪除執行時期未使用的組件。例如,我們的程式中使用了 A 組件,A 組件又參考了 B、C 兩個組件,A 組件中只有 M1 方法使用了 B 組件,而 A 組件中只有 M2 方法使用了 C 組件。我們的程式中只呼叫了 A 中的 M1 方法,從未呼叫 A 中的 M2 方法。雖然 C 組件從未被呼叫過,但由於【裁剪未使用的程式碼】功能僅進行靜態參考檢查,因此 C 組件仍然不會被裁剪掉。
無法很好地支援反射。由於它是使用靜態分析來實現的,因此它可能會裁剪掉執行時期才會透過反射載入的組件。
為此,我開發了一個用來對 .NET Core 程式進行瘦身的應用程式,它能解決上述 .NET Core 的【裁剪未使用的程式碼】問題。它「支援 Windows Forms 和 WPF」,會在執行時期分析程式載入的組件,從而得知哪些組件未被使用,因此不僅「能刪除更多未被使用的組件」,而且能自然地「支援反射」。
程式裁剪效果對比:
| 原始尺寸 | .NET 內建裁剪 | Zack.DotNetTrimmer | |
|---|---|---|---|
| 空 Core MVC 專案 | 97MB | 50.3MB | 43.6MB |
| 空 WebAPI 專案 | 93MB | 46.3MB | 34.5 MB |
| 空 WPF 專案 | 152 MB | 不支援 | 75.2 MB |
| 空 WinForms 專案 | 152 MB | 不支援 | 50.0 MB |