关于.net项目引用的研究
托管平台项目引用,可以总结为4种:
一、直接引用解决方案之内的项目
这种引用的实际本质还是把引用项目的路径映射到了项目所编译的dll文件上,这个工作是开发工具替我们做的。使用这种方式在编译时会把所引用项目的编译结果给复制到当前项目的编译路径下。
二、通过文件浏览引用类库
也是最常用的引用方式,编译时会把引用dll文件给复制到编译路径之下。
三、引用GAC(Global Assembly Cache)类库
你所使用的任何基础类型,如System.***,都是.net平台类库所提供的,在安装.net平台时,系统会将类库注册入全局程序集缓存之中,即GAC,引用被注册入GAC的类库在编译时不会进行复制操作,会直接根据GAC加载。
在这里扩展一下GAC注册相关的知识,GAC注册工具为GACUtil.exe,注册命令为:GACUtil /i sample.dll,移除命令为: GACUtil /u sample.dll。也可以直接通过资源管理器打开GAC所在地址进行注册,一般为路径为C:\Windows\assembly,打开该位置之后会看到所有当前系统被注册的类库文件,你可以将你要进行注册的类库文件直接拖到该路径下进行注册。那么如何将现有注册的GAC类库给复制出来呢,有两种方式:1、通过全局搜索类软件如Everything直接搜索类库名称,找到类库位置进行复制。2、用CMD命令定位到C:\Windows\assembly,用dir指令查看文件夹结构,你会发现结构中会包括类似如下的子文件夹:
其实这些子文件夹便是分别存储着不同处理器体系结构的类库,看到这些之后,输入要访问的子文件夹名称或者直接使用TAB键进行子文件夹的快捷选择,然后回车进入,再度输入dir指令查看结构,直到找到类库文件的位置,用copy指令将其复制出来。
注意,要想将类库注册入GAC之中,该类库必须进行了强签名,若要将一个弱命名的类库注册入GAC,则会得到错误提示:“Failure adding assembly to the cache: Attempt to install an assembly without a strong name”
四、引用COM组件中间代理类库
这种引用相较于上面几种,是最为不常见的。
因为托管代码并不能直接操控COM组件,所以在引用COM组件之后,实际上是引用了一个开发工具自动生成的操作目标COM组件的中间代理类库,但也有一些组件会在系统之中内置好代理类库,无需开发工具再度生成。像这种引用,你会发现代理类库的名称会和你所引用的COM组件名称不一样,这是正常的。