如何在没有 RegAsm.exe 的情况下注册类型库

Posted

技术标签:

【中文标题】如何在没有 RegAsm.exe 的情况下注册类型库【英文标题】:How to Register a Type Library without RegAsm.exe 【发布时间】:2010-03-03 22:44:43 【问题描述】:

我想知道是否可以在不使用RegAsm tool 的情况下注册类型库。这是我的情况,希望能解释我为什么要这样做:

我正在用 .NET 开发一个程序集,它将为我们较旧的 VB6 应用程序提供一些现代功能。我已经使用 RegAsm 在我的开发机器上成功注册了程序集和类型库,如下所示:

regasm.exe MyAssembly.dll /tlb /codebase

上述命令生成类型库(MyAssembly.tlb)并注册它以及注册程序集。我需要注册类型库,以便我可以在 VB6 中使用 Intellisense。

我对这个方法的问题是我在生成类型库文件时没有像使用TlbExp.exe 那样的控制级别。特别是,我需要使用 TlbExp 的 /names 标志来specify the proper case 我的属性名称(RegAsm 屠宰它们)。那么如果我使用 TlbExp 来生成我的 tlb 文件,有什么方法可以将它与程序集注册过程分开注册吗?

编辑: da_m_n 的回答对于我提出的问题是正确的。但是,我错误地假设,仅仅因为 RegAsm 可以注册一个类型库,就必须注册 tlb 以便在 VB6 中引用它。所以现在我正在注册程序集并使用固定名称引用未注册的、由 TlbExp 生成的 tlb。

【问题讨论】:

实际上,我认为我必须注册 tlb 文件才能在 VB6 中引用它的假设可能是错误的。也许这个问题是没有意义的。我明天再看看。 现在我在我的电脑上找不到regtlib.exe。我可以找到regtlibv12.exe,但根本没有文档。在我看来,MS 不再热衷于 .NET。 【参考方案1】:

使用regtlib.exe注册tlbexp生成的tlb文件。

【讨论】:

【参考方案2】:

regtlib.exe 在 Win10 平台上不可用。使用相应的 .NET SDK 中的适当 TlbExp.exe(例如 "%ProgramFiles(x86)%\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\TlbExp.exe" "$(TargetDir)$(TargetFileName)" see https://docs.microsoft.com/en-us/dotnet/framework/tools/tlbexp-exe-type-library-exporter)。

【讨论】:

Tlbexp.exe 生成类型库但不注册它。这与生成和注册类型库的程序集注册工具 (Regasm.exe) 形成对比。要使用 COM 生成和注册类型库,请使用 Regasm.exe。 @EduBic,很好的洞察力,...但是在构建机器上,可执行文件不运行,只是打包,可能只需要构建类型库。

以上是关于如何在没有 RegAsm.exe 的情况下注册类型库的主要内容,如果未能解决你的问题,请参考以下文章

RegAsm.exe无法通过installshield 2016注册Dll

如何在 Visual Studio 2008 安装项目中使用 regasm 注册 .NET CCW

C# COM DLL:我使用 Regasm 还是 Regsvr32?

regasm 无法定位输入程序集

如何从 Visual Studio 命令提示符以外的命令行运行 regasm.exe?

如何将 .NET 程序集注册为 COM?