我正在维护一个旧的VB6应用程序,它是一个更大更新的软件系统的一部分,当我尝试在visual basic 6 IDE中调试代码时,只要它试图从任何引用中实例化一个新对象,应用程序就会崩溃VB.Net dll.
错误消息是:
运行时错误'-2147024894(80070002)':自动化错误系统找不到指定的文件
这听起来像引用是错误的,但是当我运行.exe文件时,一切正常,我的更改也会被反映出来.现在我的选择是创建大量的消息框进行调试,我尝试删除项目引用并重新添加它们,以及重新注册所有dll以及通常的Google/StackOverflow搜索.
我做错了什么,或者这种疯狂的调试方法只是程序员使用古代技术的命运?
VB6调试器根本不像您可能使用过的其他调试器那样工作.它实际上并没有启动你的EXE,它是VB6.EXE,它是正在执行的程序.调试器将自身连接到p代码执行引擎.
这有几个后果,最重要的一个是你在这里看到CLR将在任何依赖组件的错误位置.它首先查看GAC,接下来是EXE的探测路径.通常与存储EXE文件的目录相同.你可以看到Fuslogvw.exe出错
这个丑陋的解决方法是将DLL复制到VB6.exe安装目录,以便CLR可以找到它们.通常,[ComVisible]组件应该安装在GAC中,因此任何使用它们的客户端程序都可以找到DLL.当你在你的开发机器上执行此操作并忙于测试和编辑代码时,这也很难看,你一定会忘记更新GAC副本并失去一小时的生活,想知道为什么你的更改无效.可能要做的事情是使用Post-build事件并将DLL复制到VB6.exe安装目录,这样就不会有错误.