在 vb.net 中使用 vb6 ocx 控件时无法加载文件或程序集“Interop.VBRUN”

Posted

技术标签:

【中文标题】在 vb.net 中使用 vb6 ocx 控件时无法加载文件或程序集“Interop.VBRUN”【英文标题】:Could not load file or assembly "Interop.VBRUN" when using a vb6 ocx control in vb.net 【发布时间】: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

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

问题

我该如何解决这个问题?这是什么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 文件。 【参考方案1】:

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

【讨论】:

msvbvm60.dll 不是 ActiveX 控件。您使用 tlbimp.exe 生成包装器。

以上是关于在 vb.net 中使用 vb6 ocx 控件时无法加载文件或程序集“Interop.VBRUN”的主要内容,如果未能解决你的问题,请参考以下文章

VB6的MSCOMCTL.OCX控件(Microsoft Windows Common Controls 6.0)不能用了,怎样解决?

SpringJdbcTemplate的使用方法

我在WIN7下用VB6开发的小软件,其中用到toolbar等控件,为啥在XP下打不开工程,说加载OCX控件错误

VB6要发布免安装绿色版本 但是有,ocx控件 怎么搞?

VB6 - IMGSCAN.ocx - 柯达 i2600 扫描仪中的 TWAIN

VB6通用控件在Windows 10上