共享程序集的一个副本可供一台机器上的多个应用程序使用,文件不会出现在应用程序的运行目录下,而是被安装在GAC(Globle Assemble Cache)中。
在.net4.0中,GAC被分在2个地方。.NET1.0到.NET3.5的基础类库被放到“C:\Windows\assembly”,而在.NET4.0 编译下的程序集,是放到“C:\Windows\Microsoft.NET\assembly\GAC_MSIL”中。
比如我们经常使用的MessageBox.Show()方法,属于System.Windows.Forms.dll程序集,这个程序集是在"C:\Windows\assembly"中。
部署到GAC之前,一定要给这个程序集赋一个强命名(包括程序集的友好名称、版本号、公钥值等),它就像是.NET中的GUID,是一个唯一标识符。它的作用是用于标识给定.NET二进制文件的发行者。
部署共享程序集的步骤如下:
1、生成强命名文件。可通过命令或图形化两种方式实现。
(1)命令方式
a、使用【sn -k 文件名.snk】命令生成以 *.snk(strong name key)后缀的文件。
例如:sn -k mydll.snk
b、将强文件信息写进AssemblyInfo.cs文件中。
添加“[assembly: AssemblyKeyFile(强文件文件名)]”。例如:[assembly: AssemblyKeyFile(@"F:\mydll.snk")]
(2)图形化方式
a、在项目属性中,选择“签名”,勾选“为程序集签名”,选择“新建”。
b、创建强命名文件。
2、安装强命名的程序集。
使用【gacutil.exe】命令将程序集安装到GAC中。
【gacutil.exe -i 程序集名称】:安装程序集到GAC中。例如:gacutil.exe -i mylib.dll
【gacutil.exe -l 程序集名称】:查看程序集是否在GAC中。例如:gacutil.exe -l mylib(不能带dll后缀)
【gacutil.exe -u 程序集名称】:卸载GAC中的程序集。例如:gacutil.exe -u mylib(不能带dll后缀)
将代码库部署为私有还是共享,仍然是一个需要权衡的问题。它取决于项目本身的细节。一般来说,如果构建的库可被大量应用程序使用,共享程序集将十分有帮助,因为你可以轻松地部署一个新的版本。