【问题标题】:change interop dll version created in vb6 when using in .net在 .net 中使用时更改在 vb6 中创建的互操作 dll 版本
【发布时间】:2026-01-22 03:45:01
【问题描述】:

我在 .net 项目中引用 vb6 dll 时遇到问题。当我在 .net 项目中引用 vb6 dll 时,互操作 dll 是使用相同版本(1.2.0.0)创建的。它给我带来了问题,因为如果版本与以前相同,用于在客户端部署应用程序的设置不会替换 dll。我想更改互操作 dll 的版本(使用 vb6 dll 创建)。我读到它是使用 tlbIMP 完成的,但是如何为 vb6 dll 创建 tlb 文件。或者有没有其他方法可以做到这一点。

谢谢 索拉布

【问题讨论】:

  • 您想更改 VB6 DLL 的版本而不在 VB6 中重新编译它?如果您没有对 VB6 DLL 进行修改,为什么还要增加版本号?
  • vb6 dll有变化,重新编译后版本正在更新,但在.net中引用此dll时创建的interop dll版本没有更新。由于哪个设置没有替换该文件

标签: vb.net vb6 interop versioning


【解决方案1】:

这是我们用来创建互操作 dll 的一个小批处理文件,因此它具有很强的命名:

sn.exe -i MichiganLTAP.pfx MagicContainerName

tlbimp.exe ourVb6.dll /out:Our.Strongnamed.Interop.dll /asmversion:7.1.0.0 /keycontainer:MagicContainerName /machine:X86 /namespace:Our.Strongnamed /verbose /sysarray

sn.exe -d MagicContainerName

从您的角度来看,重要的转换是:/asmversion:7.1.0.0

您应该能够将其设置为您想要的任何内容。查看MSDN Library page,了解有关可用开关的更多信息。

【讨论】:

  • 是的,我很确定能够指定版本,你必须手动创建互操作,而不是让 VS 为你做。
【解决方案2】:

使互操作库的版本号与由 VB6 创建的类型库的版本号不同,非常意义不大。互操作库中的内容与您在 VB6 中编写的代码之间存在一对一的映射。互操作库只包含 VB6 COM 接口的 IL 声明,没有实际代码。 CLR 使用它来快速生成接口的 RCW。

在 VB6 中使用 Project + Properties、Make 选项卡、版本号更改类型库版本号。主要和次要是重要的。仅当您在公开可见的 VB6 类中进行更改时才执行此操作。顺便说一句,这样做是必需的,它可以避免 DLL Hell。

【讨论】:

  • 我更改了 VB6 dll 中的版本号,但 interop dll 的版本号始终与 vb6 dll 的实际版本不同。就我而言,vb6 dll 的版本是 5.1.0.17,但互操作 dll 版本是 1.2.0.0。更改实际 dll 版本不会影响互操作 dll 版本
  • 你在VB6中打开了二进制兼容性选项吗?