【问题标题】:Could not load file or assembly "Interop.VBRUN" when using a vb6 ocx control in vb.net在 vb.net 中使用 vb6 ocx 控件时无法加载文件或程序集“Interop.VBRUN”
【发布时间】:2021-01-06 01:34:48
【问题描述】:

上下文

我需要创建一个 vb6 ocx 控件并在 vb.net 中使用它。 本质上就是在老vb6PictureBox上绘图的方法集合。

.ocx 文件创建后,我使用通常的regsvr32 过程将其记录下来,并将其导入到 Visual Studio 工具箱中。 我可以毫无问题地将新控件添加到表单中,并且它会运行。

问题

如果我添加一个button 并在它的点击子中调用控件的一个函数(它应该在picturebox 上画一条线),则会引发异常:

System.IO.FileNotFoundException

无法加载文件或程序集“Interop.VBRUN, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null”或其依赖项之一。

尝试

  • 我尝试将所有控制代码复制到一个新项目中并再次导出 ocx。 没有结果。
  • 我尝试在 Visual Studio 2008 和 Visual Studio 2019(Windows XP 和 Windows 10 上)上使用该控件。 没有结果。
  • 我试图注释掉大部分的 ocx 控制代码,只保留几个激活的方法。 没有结果。
  • 我尝试在 vb6 项目中使用该控件。 效果很好
  • 我尝试导入此 Interop.VBRUN 作为参考,但在任何地方都找不到。

注意事项

我在带有 Windows XP 的虚拟机上使用 Vb6。我已经在此虚拟机上及其外部(在 Windows 10 上)测试了 Visual Studio(2008 和 2019)中的 ocx。我的设置:

  • 目标框架 = .NET Framework 4;
  • 目标 CPU = x86

我还在 stackoverflow 和网络上搜索了解决方案:类似的结果很少,但没有一个有效的解决方案。

问题

我该如何解决这个问题?这是什么Interop.VBRUN?问题是由代码(我应该重写)还是其他原因引起的?

【问题讨论】:

  • 当你说“没有结果”时——这是什么意思?我认为您的意思是,这些试验没有任何区别,即导致相同的错误?
  • Interop.x 是 COM 包 x 的托管 COM 互操作程序集。我认为它很可能是通过在类型库上运行 tlbimp 自动创建的,因此请在构建的输出文件夹中查找它。
  • 克雷格的评论是正确的。您应该查找文件“Interop.VBRUN.dll”并在您的项目中添加对它的引用
  • @UuDdLrLrSs 是:“no result”代表“这没有区别,错误仍然存​​在”
  • AxInterop. 文件被创建为 OCX 文件的 .NET “包装器”。 Interop. 文件是相同的,但用于常规 DLL。通常,如果您有一个 VB6 DLL abc.dll 并且您从 .NET 项目中引用了它,那么文件 Interop.abc.dll 将被自动创建,并作为参考添加。这只是仅供参考;它没有解释为什么缺少 VBRUN 文件。

标签: vb.net vb6 vb6-migration ocx


【解决方案1】:

我使用 aximp.exe 对 vb6 *.ocx 进行了封装。试试看吧?

【讨论】:

  • msvbvm60.dll 不是 ActiveX 控件。您使用 tlbimp.exe 生成包装器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 2020-08-17
相关资源
最近更新 更多