C# 生成强命名程序集并添加到GAC
针对一些类库项目或用户控件项目(一般来说,这类项目最后编译生成的是一个或多个dll文件),在程序开发完成后,有时需要将开发的程序集(dll文件)安装部署到GAC(全局程序集缓存)中,以便其他的程序也可以调用。
一、GAC的作用
全称是Global Assembly Cache作用是可以存放一些有很多程序都要用到的公共Assembly,例如System.Data、System.Windows.Forms等等。这样,很多程序就可以从GAC里面取得Assembly,而不需要再把所有要用到的Assembly都拷贝到应用程序的执行目录下面。举例而言,如果没有GAC,那么势必每个WinForm程序的目录下就都要从C:WINDOWSMicrosoft.NETFrameworkvX下面拷贝一份System.Windows.Forms.dll,这样显然不如都从GAC里面取用方便,也有利于Assembly的升级和版本控制。
注册步骤如下:
二. 生成强程序集
2.1 生成密钥对
(1) 一般在VS的安装目录下 打开开发人员命令提示符。
(2) 管理员权限运行开发人员命令行,输入命令生成密钥,例如: sn -k C:UsersXXXXXXDesktopGACMyDLL.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 est.dll
注册命令 gacutil.exe /k c:MyTest est.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