仅仅引用DLL,编译后会是什么样子?
2008-07-31 14:00
253 查看
我们在编写程序的时候,经常会引用各种各样的DLL。时间长了,有些DLL可能仅仅是引用了一下而已,其实代码里面根本就没有用到。
那么,这些没有用到的引用,会不会对我们的代码产生影响呢?我也不知道,做个实验试试看好了。
假如,我们写了两个DLL,分别为A和B。其中,A引用了B。不过呢,在A的代码里面,并没有使用到B。现在编译A,然后用ILDasm查看一下。
在ILDasm的界面下,选择“视图。元信息。显示”,从显示的内容可以明显的看出来,在A的代码里面,并没有B。其实,只要看AssemblyRef中有没有B就可以了。
如此看来,只要代码里面没有用到,那就不会对编译好的代码有影响。
可是,毕竟我们还是引用了B,总会有些影响的吧。首先查看一下VS的输出,可以清楚的看到对B的refercence。这直接导致了B这个DLL被拷贝到了A的生成目录下面。而且,如果这个时候还没有B的话,还会自动导致B被编译。
这样看来,影响也很明显了:
1,会导致A的生产目录下面出现B,虽然没有用吧。当东西多了之后,我们也不知道哪个有用,只好都保留。这就无形中增加了生成的程序的大小。
2,至少理论上,会多少降低一点生成A的时间吧。
下面继续。我在A里面,不仅仅是引用B,我还using它一下,看看会如何。
经过测试,发现IL代码没有任何变化,也就是说,如果只是using了,跟仅仅是引用B的效果是一样的。
那么,这些没有用到的引用,会不会对我们的代码产生影响呢?我也不知道,做个实验试试看好了。
假如,我们写了两个DLL,分别为A和B。其中,A引用了B。不过呢,在A的代码里面,并没有使用到B。现在编译A,然后用ILDasm查看一下。
在ILDasm的界面下,选择“视图。元信息。显示”,从显示的内容可以明显的看出来,在A的代码里面,并没有B。其实,只要看AssemblyRef中有没有B就可以了。
如此看来,只要代码里面没有用到,那就不会对编译好的代码有影响。
可是,毕竟我们还是引用了B,总会有些影响的吧。首先查看一下VS的输出,可以清楚的看到对B的refercence。这直接导致了B这个DLL被拷贝到了A的生成目录下面。而且,如果这个时候还没有B的话,还会自动导致B被编译。
这样看来,影响也很明显了:
1,会导致A的生产目录下面出现B,虽然没有用吧。当东西多了之后,我们也不知道哪个有用,只好都保留。这就无形中增加了生成的程序的大小。
2,至少理论上,会多少降低一点生成A的时间吧。
下面继续。我在A里面,不仅仅是引用B,我还using它一下,看看会如何。
经过测试,发现IL代码没有任何变化,也就是说,如果只是using了,跟仅仅是引用B的效果是一样的。
相关文章推荐
- VC++.NET中添加由C#编译的DLL引用的方法
- dll加密处理 你DLL要加密,不能让人家可以用Reflector反编译出来,不然什么算法都没有用
- .net编译时一直提示引用了找不到的dll文件
- VS 编译Debug/Release时添加引用Debug|Release版本的dll
- VS编译时会将引用参照的dll所引用的子dll一起拷贝
- C# vb.net 分别引用C++编译DLL
- asp代码编译成dll有什么用?服务器上又不给注册?
- 引用dll 写代码没问题,编译出问题
- Swig将C++编译lib项目转换为C#可引用的dll[勘误后]
- VS2010引用项目dll,编译时报错
- VS编译时自动引用Debug|Release版本的dll
- 为什么在编译C#文件的时候不用加/r:System.dll 类库的引用
- 解决使用MSBuild编译项目没有拷贝间接引用的dll问题
- .Net项目中添加DLL引用后无法编译的解决方案
- [原创]C#引用C++编译的dll
- VS编译时自动引用Debug|Release版本的dll
- 如何让VS编译时自动引用Debug|Release版本的dll
- VS2010 项目引用了DLL文件,也写了Using,但是编译时提示:未能找到类型或命名空间名称
- 找不到编译动态表达式的一种或多种类型。是否缺少对microsoft.CSharp.dll和System.core.dll的引用”
- 错误 36 找不到编译动态表达式所需的一种或多种类型。是否缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用?