VB6针对并排汇编进行编译

dav*_*idk 2 vb6 com com-interop side-by-side regfreecom

我有一个用C#编写的DLL,并设置为COM可见性.我将它设置为并排组件,并且可以将应用程序成功部署到客户端PC免费注册.我的问题与开发PC有关.是否可以在类似的免注册庄园中针对DLL进行编译,或者是否需要在开发机器上进行注册?我已经尝试通过Project -> References菜单直接添加DLL 并收到错误,指出"无法添加对特定文件的引用".DLL与.vbp文件位于同一目录中,我尝试添加DLL,无论是否存在客户端应用程序清单.

Han*_*ant 5

我已经尝试通过Project - > References菜单直接添加DLL

这增加了对类型库的引用.类型库是COM组件中类型的独立于语言的描述,VB6使用它来了解如何生成高效代码并提供类型检查和自动完成.类型库与.NET程序集中的元数据完全等效.

传统上,和VB6一样,类型库作为资源嵌入到DLL中.所以你可能习惯于在对话框中选择一个DLL.但是,当C#生成DLL时,这种方法效果不佳,只能在编译C#代码生成类型库.您必须在VB6对话框中选择.tlb文件.传统方式始于IDL语言中描述的COM组件,可以在编译代码之前生成类型库,因此可以轻松地嵌入到最终的DLL中.技术上也可以在C#中完成,但是构建步骤非常费力且非常痛苦,您必须使用不同的构建命令构建DLL两次.

C#库的类型库通常以三种方式之一生成:

  • 使用Project + Properties,Build选项卡,"Register for COM interop"选项.这需要VS运行提升,以便它可以写入注册表.通过右键单击其快捷方式并选择"以管理员身份运行"来启动VS提升
  • 通过运行Regasm.exe,使用/ tlb:filename选项.第一个子弹的替代方案,如果由于某种原因不想运行VS,则必须使用.在dev机器上使用/ codebase选项也是明智的,使它的工作方式与第1个子弹完全相同,不需要使用gacutil.exe将DLL放入GAC
  • 通过运行Tlbexp.exe实用程序,.NET程序集的类型库导出程序.没有注册,它只生成.tlb文件.

第一个项目符号是正常选择,非常理想,因为您永远不会忘记以这种方式更新类型库.在开发机器上完全没问题,因为您只关心用户机器上的无注册部署.你可能因为不再这样做而陷入困境.

使用第三种选择是可以的,并且与您的目标更加兼容,从Visual Studio命令提示符运行Tlbexp.请记住,当您更改C#代码时,必须再次执行此操作.忘记这一次并丢失头发试图弄清楚为什么你的C#改变似乎没有效果或者难以诊断错误代码让你有很多理由再次考虑第一颗子弹:)你可以效仿通过使用/ uninstall选项运行Regasm.exe来实现无reg方案.