如何用RegAsm.exe在开发/生产环境中注册C#/VB.NET开发的DLL

本文介绍如何使用RegAsm.exe工具注册.NET Framework创建的DLL文件,包括不同版本.NET Framework下RegAsm.exe的位置及使用方法,以及如何通过批处理命令批量注册DLL。

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

  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.youkuaiyun.com/kongwei521/article/details/77921436

(2)如何正确地将C#或VB.Net的DLL在开发机器或者生成环境机器中注册 http://blog.youkuaiyun.com/kongwei521/article/details/77929273

(3)如何正确地在Access VBA或Excel VBA内引用访问C#或VB.Net写的DLL http://blog.youkuaiyun.com/kongwei521/article/details/77929277


命令 `regasm MyCSharpLib.dll /tlb:MyCSharpLib.tlb` 是用于将 C# 编写的 **COM 可见类库(COM-Visible DLL)** 注册COM 组件,并生成一个 **类型库(.tlb)文件**,以便其他语言(如 C++、Delphi、VB6)可以调用它。 --- ### ✅ 使用 `regasm` 注册 COM 组件的完整步骤 #### ✅ 第一步:确保你的 C# DLLCOM 可见的 在 C# 项目中: 1. 打开项目属性(右键项目 &rarr; 属性) 2. 点击 **"Application"** 选项卡 &rarr; 点击 "Assembly Information" 3. 勾选 **"Make assembly COM-Visible"** 4. 在代码中添加 `[ComVisible(true)]`: ```csharp [ComVisible(true)] [Guid("你的唯一 GUID")] // 每个类和接口都要有唯一 GUID public class MyComClass { public int Add(int a, int b) { return a + b; } } ``` 5. 项目生成后会输出 `MyCSharpLib.dll` --- #### ✅ 第二步:使用 `regasm` 注册 DLL 并生成 .tlb 文件 1. 打开 **开发者命令提示符(Developer Command Prompt for VS)** 或 **命令行工具(CMD)** 2. 定位到 `MyCSharpLib.dll` 所在目录: ```bash cd C:\Path\To\Your\Dll ``` 3. 执行命令注册并生成类型库: ```bash regasm MyCSharpLib.dll /tlb:MyCSharpLib.tlb ``` > ✅ 成功后会在当前目录生成 `MyCSharpLib.tlb` 文件。 --- #### ✅ 第三步:注册到系统(可选) 如果你希望所有用户都可以使用这个 COM 组件,可以加上 `/codebase` 参数: ```bash regasm MyCSharpLib.dll /codebase ``` > ⚠️ 注意:`/codebase` 会将 DLL 路径写入注册表DLL 必须放在固定路径。 --- ### ✅ 第四步:在 C++ 中使用生成的 .tlb 文件 在 C++ 项目中可以导入类型库: ```cpp #import "MyCSharpLib.tlb" raw_interfaces_only ``` 然后使用 COM 接口调用: ```cpp CoInitialize(NULL); IMyComClassPtr pMyClass(__uuidof(MyComClass)); if (pMyClass) { int result = 0; pMyClass->Add(3, 4, &result); std::cout << "Result: " << result << std::endl; } CoUninitialize(); ``` --- ### ✅ 常见问题与解决方法 | 问题 | 原因 | 解决方法 | |------|------|----------| | `regasm` 不是内部或外部命令 | 未安装 .NET SDK 或未设置环境变量 | 使用 VS 的开发者命令提示符 | | COM 对象无法创建 | 没有注册或没有 `[ComVisible(true)]` | 检查代码和注册命令 | | 类没有 GUID | COM 需要唯一标识 | 添加 `[Guid("xxxx-xxxx-xxxx")]` | | 注册失败 | 没有管理员权限 | 以管理员身份运行命令行 | --- ### ✅ 总结 | 步骤 | 操作 | |------|------| | 设置项目 | 勾选 COM-Visible | | 编写代码 | 添加 ComVisible 和 GUID | | 编译 DLL | 生成 `MyCSharpLib.dll` | | 注册 COM | `regasm MyCSharpLib.dll /tlb:MyCSharpLib.tlb` | | 导出类型库 | 生成 `.tlb` 文件供 C++ 使用 | --- ###
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值