.NET Core剪裁器Zack.DotNetTrimmer升級瘦身引擎,並支持剪裁計划的錄制和回放


上周,我發布了對.NET Core程序進行瘦身的開源軟件Zack.DotNetTrimmer,與.NET Core內置的剪裁器相比,Zack.DotNetTrimmer不僅對程序的剪裁效果更好,而且還支持WPF、WinForm程序。下面是Zack.DotNetTrimmer與.NET內置的剪裁器的對比圖:

 

項目地址:https://github.com/yangzhongke/Zack.DotNetTrimmer

 

一周時間內,相關文章在各平台獲得了超過四萬閱讀量,項目收獲了將近170+個star,朋友們反饋了很多的功能建議,因此本周我對它進行了升級。本文將會對這些升級的新功能做介紹。

新功能一、支持剪裁計划的錄制和回放

默認情況下,Zack.DotNetTrimmer會在被裁剪的程序退出后立即進行程序的裁剪。但是,在比較復雜的項目中,我們可能需要多次以不同的環境、配置、登錄用戶等來運行被裁剪的程序,以便於全面覆蓋代碼的運行路徑,最后再統一進行裁剪。

因此,本程序增加支持【錄制】、【應用】兩種運行模式。在【錄制】模式下,它會把程序的剪裁計划記錄到一個記錄文件中,如果這個記錄文件已經存在,則它會把程序的剪裁計划追加到記錄文件中。在我們多次以【錄制】模式運行待裁剪的程序后,我們再用【應用】模型運行本程序,並且指定之前記錄的文件,它就會根據記錄文件中的信息對程序進行裁剪。

比如,我們先以【錄制模式】啟動待裁剪的程序,指定把剪裁計划記錄到d:/1.json文件中,然后我們以用戶A的身份對程序進行測試;然后我們再以【錄制模式】啟動待裁剪的程序,同樣指定把剪裁計划記錄到d:/1.json文件中,並以用戶B的身份對程序進行測試,從而覆蓋在以用戶A的身份運行的時候沒有覆蓋到的代碼。最后,我們再以【應用模式】啟動待裁剪的程序,指定剪裁計划文件為d:/1.json,這樣Zack.DotNetTrimmer就會把兩次【錄制模式】的代碼加載結果合並然后進行程序的裁剪。

這個功能可以用於自動化測試,只要確保多個自動化測試程序的剪裁計划使用同一個記錄文件即可。

這個功能也適用於自動構建,我們可以把提前完成的剪裁計划文件重復使用,從而實現在程序發布完成后以【應用模式】運行Zack.DotNetTrimmer,從而實現自動化地進行程序的裁剪。

新功能二、支持刪除未使用的類

默認情況下,Zack.DotNetTrimmer會把沒有被加載的程序集刪除。我們知道,對於被加載的程序集,其中仍然有可能存在沒有被使用的類,如果對這些類進行裁剪,那么我們就可以進一步壓縮.NET Core程序的大小。

新版的Zack.DotNetTrimmer支持“貪婪剪裁”的選項,啟用這個選項后,它會嘗試把程序集中未使用的類也刪除。以TeeChart這個控件的winform版演示程序為例,使用默認選項裁剪后,程序的大小從161.78 MB壓縮為79.90 MB,而使用“貪婪剪裁”選項后,程序進一步壓縮為78.38 MB,也就是又刪除了1.52 MB無用的代碼。

受制於技術實現的限制,目前它暫時無法清理含有本地代碼(比如NGen等)的程序集中的類,而且它只是把類的方法體清除,並不會完全刪除類。我會繼續研究改進這個項目,歡迎各位反饋建議。

項目地址:https://github.com/yangzhongke/Zack.DotNetTrimmer

我將會寫一篇文章講解這個軟件的實現原理,歡迎關注。


免責聲明!

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



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