程序集(assembly)有两种,私有和共享程序集。
私有程序集跟应用程序(application)放在同一目录下,每一个引用私有程序集的应用程序或程序集都有一个副本,比如a.exe和b.exe都引用了c.dll,那么在a.exe和b.exe的目录下各自需要存储一份c.dll的拷贝,在运行的时候,每个进程中也都为c.dll分配单独的空间,也就是存有两份同样的c.dll程序集的副本。
共享程序集会被安装到C:/WINDOWS/assembly,共享程序集只会在内存中分配一份空间,所有应用程序都不会为共享程序集单独分配空间,而都使用存储在同一空间的程序集。这将提高程序性能和节省内存空间。
创建和使用共享程序集有一些特殊的步骤,
-
使用sn.exe创建加密文件,sn.exe -k test.snk
-
在公共程序集的源代码中加入属性,[assembly:AssemblyKeyFileAttribute("test.snk")],习惯放在所有using的后面。或者通过project properties->Signing->Sign the assembly来指定加密文件
-
使用gacutil -i test.dll安装共享程序集,安装后在C:/WINDOWS/assembly目录下将看到test文件
在应用程序中引用共享程序集跟引用私有程序集是一样的,将bin目录下的共享程序集添加为引用就可以了。跟将私有程序集添加为引用唯一不同的地方是,在应用程序的bin目录下面看不到引用的test.dll,因为test.dll是共享程序集,在应用程序所在目录不需要拷贝(私有程序集就有test.dll的拷贝)。
http://eecn.spaces.live.com/blog/cns!1ca3e75bcba91810!220.entry