原文地址:http://www.geeksengine.com/article/register-dll.html 感谢原作者
创建C#或VB.Net DLL后,您需要在目标计算机上注册。 您可以使用Microsoft的RegAsm.exe实用程序。
Regasm.exe是一个程序集注册工具,用于读取程序集中的元数据。并将所需的项添加到注册表中。注册表允许允许COM客户端(VB6应用程序或Microsoft VBA,例如Access,Excel等)创建.NET Framework类。类一经注册,则在任何 COM 客户程序都可以使用它,就好像该类是一个 COM 类。类仅在安装程序集时注册一次。程序集中的类实例直到被实际注册时,才能从 COM 中创建。
说明:
Regasm.exe所在路径没有被系统添加PATH环境变量中,因此,REGASM命令无法识别。使用时,需要DOS窗口切换到其存储路径后才能运行运行。其一般存储的路径为:C:\Windows\Microsoft.NET\Framework\v2.0.50727\ 系统的版本不同,运路径中的数字可能会有一些差异,如下面说明:
- 2.0,3.0和3.5等.Net Framework使用相同的RegAsm.exe,它位于.Net FrameworkV2.0文件夹里面如下路径。分X86/64位Framework
C:\Windows\Microsoft.NET\Framework(32位Framework框架)\ V2.0.50727 \ RegAsm.exe
或者
C:\Windows\Microsoft.NET \Framework64(64位Framework框架)\ V2.0.50727 \ RegAsm.exe
- 4.0以上版本的.Net Framework使用一个新的RegAsm.exe,它位于.Net FrameworkV4.0文件夹中。
C:\Windows\Microsoft.NET\Framework(32位Framework框架)\v4.0.30319 \ RegAsm.exe
或者
C:\Windows\Microsoft.NET\Framework64(64位Framework框架)\v4.0.30319 \ RegAsm.exe
1:RegAsm.exe和DLL映射
如果您收到此错误“RegAsm:错误RA0000:无法加载”c:\ Windows\ system32 \ SimpleCalc.dll因为它不是一个有效的.NET程序集“,您可能在使用.Net4版本以下的 RegAsm.exe进行 注册.Net4以上版本创建的DLL。
.Net框架 | RegAsm.exe默认安装路径 | 你的DLL创建的Framework版本 |
---|---|---|
.Net框架2.0 / 3.0 / 3.5 | C:\ Windows\ Microsoft.NET \(32/64位Framework框架)\ V2.0.50727 \ RegAsm.exe | .Net框架2.0 / 3.0 / 3.5 |
.Net框架4.0、4.5、4.6 | C:\ Windows\ Microsoft.NET \(32/64位Framework框架框架)\ v4.0.30319 \ RegAsm.exe | .Net框架4.0、4.5、4.6 |
所以当注册由.Net Framework4 以上版本创建的DLL程序集时,我们不能使用.Net Framework 2.0 / 3.0 / 3.5文件夹中的RegAsm.exe进行注册。
2:如何运行RegAsm.exe
要执行RegAsm.exe,请用管理员权限打开一个命令提示符窗口,并进行切换到到RegAsm.exe所在的文件夹并运行它(否则将获得“RegAsm不被识别为内部或外部命令,可操作的程序或批处理文件”错误消息)。
切换到RegAsm.exe所在的文件夹并运行它
假设我已经将我的DLL添加到文件夹C:\ Windows\ system32,那么我可以运行以下命令:
C:\ Windows\ Microsoft.NET \ Framework \ v4.0.30319 \ RegAsm.exe SimpleCalc.dll / codebase
请注意,您不需要在命令中指定C:\ Windows\ system32,因为它是系统文件夹。 RegAsm.exe将自动查找C:\ Windows\ system32目录中的SimpleCalc.dll。
/ codebase参数是一个可选参数,它将关于DLL的信息添加到Windows注册表中,该注册表指定了磁盘上程序集的路径。
3:Regasm也可用于注销DLL
如果您获得的DLL没有与其关联的类型库文件,则可以使用Regasm实用程序和/ tlb选项生成。
C:\ Windows\ Microsoft.NET \ Framework \ v4.0.30319 \ RegAsm.exe SimpleCalc.dll /tlb:SimpleCalc.tlb
请注意,要从DLL导出类型库,您需要在计算机上具有管理员权限,否则将收到此类错误“RegAsm:error RA0000:保存导出的类型库时出错:访问被拒绝... “因为您运行regasm.exe的帐户无权写入该文件夹。
请注意,您可以为.Net Framework 下的egAsm.exe创建环境变量,以简化DLL注册。
4:Regasm也可使用批处理命令来注册程序
如果需要在多台电脑上进行注册,或者要注册的DLL组件比较多的情况下,可以使用如下的批处理命令进行注册。
@echo off
set path = C:\Windows\Microsoft.NET\Framework64\v4.0.30319\;%path%
RegAsm /codebase C:\Windows\System32\SimpleCalc.dll
pause
::C:\Windows\System32\SimpleCalc.DELL为组件和存放全路径
::C:\Windows\Microsoft.NET\Framework64\v4.0.30319\;为REGASM.EXE所在文件夹路径。
祝您编码快乐!
其他参考资料:
https://msdn.microsoft.com/zh-cn/library/tzat5yw6(VS.80).aspx
http://jingyan.baidu.com/article/09ea3ede65a7c8c0aede39c1.html
其他文章系列:
(1)如何正确地创建Access或Excel中的DLL(或在任何Microsoft Office应用程序或VB6中使用)http://blog.csdn.net/kongwei521/article/details/77921436
(2)如何正确地将C#或VB.Net的DLL在开发机器或者生成环境机器中注册 http://blog.csdn.net/kongwei521/article/details/77929273
(3)如何正确地在Access VBA或Excel VBA内引用访问C#或VB.Net写的DLL http://blog.csdn.net/kongwei521/article/details/77929277