zoukankan      html  css  js  c++  java
  • 【.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("
    引用的程序集列表:");
                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 的【引用】节点中的引用程序集可以自动到这些目录中查找。注意,这些路径只用于开发阶段,对于编译后的程序集无效。

    好了,今天的文章没什么技术含量,只是说一个小知识而已。

  • 相关阅读:
    数据对象映射模式
    策略模式
    适配模式
    注册模式
    单例模式
    工厂模式
    PHP魔法方法的使用
    【转】通过 ulimit 改善系统性能
    HDMI相关知识
    中国三种3G网络频段
  • 原文地址:https://www.cnblogs.com/tcjiaan/p/6388977.html
Copyright © 2011-2022 走看看