Dot-Net

“刪除未使用的引用”的目的是什麼

  • June 4, 2013

我已經讀過刪除未使用的引用對編譯器沒有任何影響,因為它忽略了程式碼本身沒有引用的程序集。

但我很難相信,因為那樣的話,刪除未使用的引用的真正目的是什麼?它對生成的程序集的大小或其他方面沒有任何明顯的影響。或者這種智能行為是否僅限於 C# 編譯器 (csc.exe) 而不是 vbc.exe 所固有的?

如果此功能如此無用,為什麼ReSharper將其作為一項功能提供?為什麼在 Visual Studio 項目配置對話框中提供它?

我能想到的唯一有用的活動是在部署期間。安裝程序仍會複製參考(使用過的或未使用過的)。但是對於駐留在 GAC 中的程序集(例如,BCL 程序集),這也不是問題。

它防止 CLR 在執行時載入引用的模組。這將減少啟動時間(因為載入每個模組需要時間)。根據模組的大小,它可能會顯著減少啟動時間。

對此進行測試的一種方法是創建一個測試 WinForms 項目,添加對未使用的程序集(例如 System.Web)的引用,然後執行並附加到執行檔(例如 F5)。查看載入的模組(調試 -> Windows -> 模組),您將看到引用的程序集已載入。

如果您考慮一下,CLR 將很難確定是否真的使用了依賴項(一旦添加了對它的引用,它就在清單中作為依賴項)……尤其是因為執行了一些程式碼路徑無法提前知道…

引用自:https://stackoverflow.com/questions/621680