我们在编写软件的时候,有时候需要调用COM组件,那就需要注册了,注册有两种,一种是使用regasm 在程序运行的时候注册,参考“pb调用C#编写的DLL类库“,不过受路径的限制。还有一种注册方式,使用gacutil工具把DLL注册到全局缓存中,这样只要注册一次,在什么地方都可以跨文件调用了,不受路径的限制,比较方便,推荐使用这种。

使用gacutil注册有以下要求:

一、com程序集强签名。

1. 在项目调试完成后,使用sn.exe工具生成一个密钥。sn -k "生成的密钥的全路径"。
    如在命令行输入: sn -kD:/myKey.snk
2. 将密钥与项目的程序集进行关联:项目属性-->签名-->为程序集签名-->选择强名称密钥文件。
    此外,还有另外一种方法,就是在项目的AssemblyInfo.cs文件中,修改"AssemblyKeyFile"的属性。
    如:[assembly:AssemblyKeyFile("D://myKey.snk")]
3. 重新生成项目集。

二、使用gacutil.exe注册

1、gacutil.exe文件一般在“C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin”,把gacutil.exe拷贝到项目根目录即可(gacutil.exe需要安装net framwork x.xx SDK后才有,此文件夹中的gacutil.exe也可以复制直接用)

2、把regasm.exe和gacutil.exe一同拷贝到和DLL同目录下

3、编写注册类Bat文件(我用的是bat,这样可以直接运行,也可以在程序里调用这个bat)

gacutil /if MySql.Data.DLL

regasm  MySql.Data.DLL

pause

先把DLL放到全局缓存中,再注册。

4、编写注销类bat文件,需要注意的是,注销gac的时候,只需要写DLL文件的名字,不需要加“.dll”后缀

gacutil /uf MySql.Data

regasm /u MySql.Data.dll

pause

4、DLL注册到GAC之后,会在“C:\WINDOWS\assembly”文件夹下,注册之后可以打开看看需要注册的DLL有没有在这里。

以上就是用gacutil注册到全局GAC中的流程了,需要把这些文件放到同一目录,另外,因为在windows 7及以上的系统有管理员权限,所有在windows 7及以上需要以管理员身份运行,至于Bat怎么获取管理员身份运行,可以在网上搜搜。

02-10 22:30