很多大伙伴们常常会苦思一个问题:项目代码中用不到的引用,是不是应该删除,以避免代码在编译后存在太多的无意义引用?

其实,这个问题,你完全可以自己去应证的,咋应证呢?知道反射吗,对了,只要你知道这玩意儿,那事情就好 do 了。

我建了一个控制台应用项目,然后,如下图,我在【引用】节点下添加这么一堆引用。

然后,我写了这段代码:

            XElement x = new XElement("car",
new XElement("color", "Red"),
new XElement("speed", ));
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 的【引用】节点中的引用程序集可以自动到这些目录中查找。注意,这些路径只用于开发阶段,对于编译后的程序集无效。

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

【.net 深呼吸】项目中是否有必要删去多余的引用的更多相关文章

  1. AE创建组件失败,项目中已存在对esri.arcgis.***的引用

    AE创建组件失败,项目中已存在对esri.arcgis.***的引用 解决办法:在解决方案资源管理器的引用中把错误提示中的引用删掉,再创建组件就没问题了.

  2. 给iOS项目中添加图片,并通过UIImageView引用和显示该UIImage图片

    [问题] 关于iOS/iPhone中的文件选择对话框,用于用户去选择图片等文件 过程中,问题转换为,需要给当前iOS项目中,添加一个图片. 类似于Windows开发中的资源文件,其中图片文件属于资源的 ...

  3. 【MediaKit】WPF项目中 调用摄像头拍照的开发包

    今天遇到一个 人事的项目,项目中需要调用摄像头给员工照相.如何解决这个问题呢? 介绍一个开发包给你,MediaKit.论坛里头的人都说好,但是黑兔觉得大家好才是真的好.你不妨试试~ 第一步:添加WPF ...

  4. Windows Presentation Foundation (WPF) 项目中不支持xxx的解决

    一般Windows Presentation Foundation (WPF) 项目中不支持xxx都是由于没引用相应的程序集导致,比如Windows Presentation Foundation ( ...

  5. class类名在webpack项目中的两种引用方式

    一.问题描述 在项目工程中,我们通常既用到css module,也用到普通的less文件引用方式,代码及webpack配置如下,运行时,发现只有css module起作用,如何让两者都起作用呢? // ...

  6. 关于QT建立项目中遇到的相关问题的处理办法

    关于QT建立项目中遇到的相关问题的处理办法 1.在QTCreater中新建一个空的工程时,第一次运行会抱一个错误,如下: -1: error: LNK1123: 转换到 COFF 期间失败: 文件无效 ...

  7. VS项目中使用Nuget还原包后编译生产还一直报错?

    Nuget官网下载Nuget项目包的命令地址:https://www.nuget.org/packages 今天就遇到一个比较奇葩的问题,折腾了很久终于搞定了: 问题是这样的:我的解决方案原本是好好的 ...

  8. ABP项目中使用Swagger生成动态WebAPI

    本文是根据角落的白板报的<使用ABP实现SwaggerUI,生成动态webapi>一文的学习总结,感谢原文作者角落的白板报. 1 安装Swashbuckle.core 1.1 选择WebA ...

  9. iOS 之项目中遇到的问题总结

    昨天去一家公司面试,面试官问了我在项目开发中遇到过哪些问题,是什么引起的,怎样解决的? 当时由于有点小紧张只说出了一两点,现在就来好好总结一下. 问题: 1.两表联动 所谓的两表联动就是有左右两个表格 ...

随机推荐

  1. 控制流之break

    break语句是用来 终止 循环语句的,即哪怕循环条件没有称为False或序列还没有被完全递归,也停止执行循环语句.一个重要的注释是,如果你从for或while循环中 终止 ,任何对应的循环else块 ...

  2. RAC(ReactiveCocoa)

    什么是 ReactiveCocoa ReactiveCocoa(其简称为 RAC)是由 Github 开源的一个应用于 iOS 和 OS X 开发的新框架.RAC 具有函数式编程和响应式编程的特性.它 ...

  3. AWK----awk与shell交互

    1互相调用命令  ls | awk '{if(system("ls " $0)==0) print "file "$0" exsits"}' ...

  4. ISP和IAP

    ISP(在系统编程)是一种不依赖于单片机自身软件的程序下载方式,特点是不需要从电路板上取下单片机,通过某种方式使单片机进入ISP模式,开放编程接口,由其使用的计算机将新的程序代码写入到存储器内.我们平 ...

  5. 小偷网站工具--Teleport Ultra

    可以克隆别人网站的工具 http://jingyan.baidu.com/article/219f4bf7dce58bde442d3836.html

  6. 微信小程序之----消息提示框toast

    toast toast为消息提示框,无按钮,如需关闭弹框可以添加事件设置hidden为true,在弹框显示后经过duration指定的时间后触发bindchange绑定的函数. 官方文档 .wxml ...

  7. 设置MyEclipse黑色主题背景

    设置MyEclipse黑色主题背景 1. 下载 http://eclipsecolorthemes.org/  看哪个合适直接点击进入, 下载右边的epf 2. 下载完成...打开myeclipse. ...

  8. Asp.Net集群中Session共享

    今天遇到了这个问题,于是研究了一下.要解决这个问题,首先就要明白一些Session的机理.Session在服务器是以散列表形式存在的,我们都知道Session是会话级的,每个用户访问都会生成一个Ses ...

  9. [原]崩溃在ole32!CStdMarshal::DisconnectSrvIPIDs

    最近项目里遇到一个崩溃,不定期出现,很是头疼!今晚终于忍无可忍,下决心要干掉它!(于是用凉水洗了把脸,开始分析dump)希望凌晨的这篇总结对有相似经历的朋友有所启发!(看之前相关的几个dump可以猜到 ...

  10. OD提示 "为了执行系统不支持的动作, OllyICE 在这个被调试的程序中注入了一点代码, 但是经过5秒仍未收到响应..." 解决办法

    别的OD就可以,我自己整合过的一个很顺手的OD就是不行,最后找到了解决办法: 转自:http://bbs.pediy.com/showthread.PHP?t=97629 -------------- ...