C# GAC

C# 生成强命名程序集并添加到GAC

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

一、GAC的作用

      全称是Global Assembly Cache作用是可以存放一些有很多程序都要用到的公共Assembly,例如System.Data、System.Windows.Forms等等。这样,很多程序就可以从GAC里面取得Assembly,而不需要再把所有要用到的Assembly都拷贝到应用程序的执行目录下面。举例而言,如果没有GAC,那么势必每个WinForm程序的目录下就都要从C:\WINDOWS\Microsoft.NET\Framework\vX下面拷贝一份System.Windows.Forms.dll,这样显然不如都从GAC里面取用方便,也有利于Assembly的升级和版本控制。

注册步骤如下:

二. 生成强程序集

  2.1 生成密钥对

     (1) 一般在VS的安装目录下 打开开发人员命令提示符。

      

     (2) 管理员权限运行开发人员命令行,输入命令生成密钥,例如: sn -k C:\Users\XXXXXX\Desktop\GAC\MyDLL.key

     

 

2.2 将密钥给程序集签名

       将生成的密钥文件放在任意的程序集工程根目录下:

  

  在AssemblyInfo.cs文件中添加一下内容:

  

  编译并生成DLL。

三、 通过gacutil 将DLL注册到GAC

 注册有两个方法:

 2.1 使用“开发人员命令提示”注册:

    

 

2.2 使用cmd命令行:

  这是要先将gacutil.exe及其依赖文件拷贝出来:

    

  以管理员权限运行cmd如下:

  

 

  至此,MyDLL.dll就已经成功添加到了GAC中了。

3  测试验证

  3.1 在调用工程中,通过Reference -> Browse 添加MyDLL.dll

    

  3.2 调用MyDLL.dll中各种接口,并编译程序。此时,MyDLL.dll也被复制到了同目录下:

     

  3.3 此时删除该目录下的MyDLL.dll,发现CallMyDLL.exe仍能正常调用DLL中的函数。证明MyDLL.dll注册到GAC中是有效的。

四、总结

只有strong name的 DLL 才能被注册到 GAC 中
GAC下的DLL名字不能重复
GAC 的注册工具是 gacutil.exe
“gacuntil.exe”需要管理员权限
使用示例
注册DLL到GAC目录
DLL位置在 c:\MyTest\test.dll
注册命令 gacutil.exe /k c:\MyTest\test.dll
注册完成后可以在 gac 目录下查看到该 DLL
卸载注册到GAC目录下DLL
卸载GAC下DLL 只需要一个DLL名字即可
卸载命令 gacutil.exe test
卸载完成后,刚才注册的test.dll就会从gac目录下删除
具体详细命令 使用 /? 或者 /h 查看帮助文档
————————————————
版权声明:本文为CSDN博主「九霄梦黎」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013813838/article/details/52886438

posted @ 2021-10-20 10:13  卖雨伞的小男孩  阅读(815)  评论(0编辑  收藏  举报