在VB6中调试引用.Net dll不起作用但运行.exe确实如此

时间:2014-02-21 20:19:32

标签: .net vb.net vb6

我正在维护一个旧的VB6应用程序,它是一个更大更新的软件系统的一部分,当我尝试在visual basic 6 IDE中调试代码时,应用程序在尝试实例化一个新对象时崩溃来自任何引用的VB.Net dll。

错误消息是:

运行时错误'-2147024894(80070002)': 自动化错误 系统找不到指定的文件

这听起来像引用是错误的,但是当我运行.exe文件时,一切正常并且我的更改会被反映出来。现在我的选择是创建大量的消息框进行调试,我尝试删除项目引用并重新添加它们,以及重新注册所有dll以及通常的Google / StackOverflow搜索。

我做错了什么,或者这种疯狂的调试方法只是程序员使用古代技术的命运?

1 个答案:

答案 0 :(得分:5)

VB6调试器与您可能使用的其他调试器完全不兼容。它实际上并没有启动你的EXE,它是VB6.EXE,它是正在执行的程序。调试器将自己连接到p代码执行引擎。

这会产生一些后果,这里最重要的一点就是CLR会在任何依赖程序集的错误位置查找。它首先查看GAC,接下来是EXE的探测路径。通常与存储EXE文件的目录相同。你可以看到Fuslogvw.exe

出错

这个丑陋的解决方法是将DLL复制到VB6.exe安装目录,以便CLR可以找到它们。通常,[ComVisible]组件应该安装在GAC中,因此任何使用它们的客户端程序都可以找到DLL。当你在你的开发机器上执行此操作并忙于测试和编辑代码时,这也很难看,你一定会忘记更新GAC副本并失去一小时的生活,想知道为什么你的更改无效。可能要做的事情是使用Post-build事件并将DLL复制到VB6.exe安装目录,这样就不会有错误。