.net DLL注册

tlsoft 2020-4-28 501


创建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\ 系统的版本不同,运路径中的数字可能会有一些差异,如下面说明:

  1. 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

  2. 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.5C:\ Windows\ Microsoft.NET \(32/64位Framework框架\ V2.0.50727 \ RegAsm.exe.Net框架2.0 / 3.0 / 3.5
.Net框架4.0、4.5、4.6C:\ 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所在文件夹路径。

说明:将上面批处理命令存为  CMD.bat 后,双击即可完成注册。当注册不成功时,在CMD.BAT文件上单击右键,选择以管理员身份运行即可完成注册。

祝您编码快乐!

其他参考资料:

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



最新回复 (0)
返回
发新帖