在 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)不能用了,怎样解决?
我在WIN7下用VB6开发的小软件,其中用到toolbar等控件,为啥在XP下打不开工程,说加载OCX控件错误