【.net 深呼吸】項目中是否有必要刪去多余的引用


很多大伙伴們常常會苦思一個問題:項目代碼中用不到的引用,是不是應該刪除,以避免代碼在編譯后存在太多的無意義引用?

其實,這個問題,你完全可以自己去應證的,咋應證呢?知道反射嗎,對了,只要你知道這玩意兒,那事情就好 do 了。

我建了一個控制台應用項目,然后,如下圖,我在【引用】節點下添加這么一堆引用。

 

然后,我寫了這段代碼:

            XElement x = new XElement("car",
                new XElement("color", "Red"),
                new XElement("speed", 160));
            Console.WriteLine(x);

也就是說,在我的代碼里面,只用到了 System.Xml.Linq 程序集中的類型(默認的 mscorlib 除外)。那么,當我這個程序集執行時,它會不會如VS項目中所列,把所有的引用都添到引用列表中呢?

好,咱們來反射一下:

            Assembly curass = Assembly.GetExecutingAssembly();
            var refs = curass.GetReferencedAssemblies();
            Console.WriteLine("\n引用的程序集列表:");
            foreach (AssemblyName asn in refs)
            {
                Console.WriteLine(asn.FullName);
            }

現在可以運行一下程序。

從上圖可以看到,在運行階段,只是引用了我在代碼中用到的 System.Xml.Linq 程序集。

 

我們還可以繼續實驗,在上面的代碼上再加上這么一句:

    DataSet ds = new DataSet();

這個時候,我這代碼里不僅用到了 System.Xml.Linq 程序集,還用到了 System.Data 程序集。

再運行一下看看。

看到了吧,多了個 System.Data。

 

經過以上代碼的試驗,我們可以知道,在 VS 中為項目添加的程序集引用,並不會完全搬到運行的程序集中的,程序集的引用是看你在代碼中用到了哪些類型。

這么一來,大家就沒有必要在項目的引用列表中死摳門了,人啊,尤其是程序員,特別容易得強迫症,比如,時下流行的性能強迫症,實際上,性能只是個指標,可是很多人是本末倒置,把性能優化當作項目的核心,而項目的真正核心是主體功能開發。

這種思維,用一個很民間的詞來形容,叫做——鑽牛角尖,牛角尖有時候是得鑽一鑽,然而,過猶不及,牛角尖鑽得過了頭,反而誤事,弄得主次不分,是非不明了。凡事,不必太過。

那是不是 VS 項目中添加的引用都不必刪呢,老周是這么想的,如果是.net中的類庫,可以不那么在乎;不過,如果你引用的庫是來自第X方,當不使用時,應該去掉,因為別人的庫一般以.dll文件存儲,許多時候我們也不會把它安裝到GAC中的(不要什么都放到GAC中,這樣很浪費資源),一旦這些dll文件被刪了,有可能找不到文件,所以,對於第X方的引用應當在不用時去掉引用。

 

另外,補充一點,VS 在項目屬性窗口中,有一個【引用路徑】標簽頁。如下圖

這個是干啥用的呢。這個頁面中,你可以指定一堆目錄路徑,VS 的【引用】節點中的引用程序集可以自動到這些目錄中查找。注意,這些路徑只用於開發階段,對於編譯后的程序集無效。

 

好了,今天的文章沒什么技術含量,只是說一個小知識而已。

 


免責聲明!

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



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