天天看点

GAC全局程序集缓存相关知识

GAC全局程序集缓存相关知识

一 将dll部署到全局程序集缓存(GAC)中

全局程序集缓存(GAC)(位置 C:\WINDOWS\assembly)(win7 .net 4.0下 C:\Windows\Microsoft.NET\assembly\)。

针对一些类库项目或用户控件项目(一般来说,这类项目最后编译生成的是一个或多个dll文件),在程序开发完成后,有时需要将开发的程序集(dll文件)安装部署到GAC(全局程序集缓存)中,以便其他的程序也可以调用。

  一般来说,将程序集(dll)安装到GAC中有以下几种方法:

1.   手动将要安装部署的dll文件拖至系统目录windows下的assembly文件夹下(一般为C:/windows/assembly),此种方法不便于在安装部署时使用。

2.   使用gacutil.exe工具安装:gacutil -i "要注册的dll文件全路径"。

     "gacutil.exe”工具为.NET自带工具 (C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin)

      注win7下由于权限问题,要以管理员身份启动这个命令才行;

在开始运行中输入"cmd”进入命令窗口,通过CD选择到"gacutil.exe”文件所在的目录,

或者 使用Visual Studio 命令提示符

如在命令行输入: gacutil -i D:/Microsoft.SharePoint.dll

可以输入‘gacutil -?’查看帮助

但是,注意:不能将一个弱命名程序集安装到GAC中。在进行上述2-3种方法安装过程之前,我们必须保证此项目具有强名称才可以。

    给项目添加强名称需要以下三步:

1. 在项目调试完成后,使用sn.exe工具生成一个密钥。sn -k "生成的密钥的全路径"。

    如在命令行输入: sn -k D:/myKey.snk

2. 将密钥与项目的程序集进行关联: 项目属性-->签名-->为程序集签名-->选择强名称密钥文件。

    此外, 还有另外一种方法,就是在项目的AssemblyInfo.cs文件中,修改"AssemblyKeyFile"的属性。

    如: [assembly:AssemblyKeyFile("D://myKey.snk")] 这个方法在vs2010中不行,会报错,推荐用第一种

3. 重新生成项目集,再用gacutil -i 安装

将程序集从GAC中移出(称为“卸载”)的方法也有两种:

1:打开GAC文件夹,选中要卸载的程序集,然后在右键菜单中选择“卸载”

2:使用DOS命令:gacutil /u myControls

注:/u表示卸载,后面的参数表示的是程序集的名称,不能写上.dll

二 如何引用全局程序集缓存中的dll