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 |