一、為什麼要開發.NET Core程式瘦身器?
.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 ,它會在執行時分析程式載入的程式集,從而得知哪些程式集沒有被使用,因此它不僅 能刪掉更多沒有被使用的程式集,而且能天然地 支援反射 。
二、程式剪裁效果對比:
三、下載地址
獲取專案開源地址和詳細用法請訪問
https://github.com/yangzhongke/Zack.DotNetTrimmer/
四、原理分析
微軟為.NET Core提供的Diagnostics庫可以獲取.NET Core執行時的資訊,比如程式載入的程式集、TCP通訊、IO操作等,它可以獲取我們能夠想到的所有執行時資訊。我的這個程式就是使用DiagnosticsClient檢查.NET Core程式執行中載入的所有的程式集,這樣就知道哪些程式集沒有被使用了。