将COM引用添加到项目:如何更新VB.net中的可用引用列表?

时间:2016-08-26 07:18:29

标签: .net vb.net

我曾经在VB.net中编写小代码,需要添加和导入特定的引用。我已经在我的开发PC上安装并注册了很多dll,但是当我转到" Add Reference"对话框中,只有部分出现在可用引用列表中。

例如,对于一个特定产品,我安装了版本8,9和10的dll,但只列出了版本8:其他2个缺失,我必须使用"浏览"选项将它们添加到我的项目中。

This is the list of References available in the "Add References" combo box

我的问题是: 怎么可能不是我的电脑上安装的所有参考都出现在组合列表中?如何使Visual Studio实现现有引用列表?

感谢您的时间和问候,

Ignacio PdeA 黎巴嫩

1 个答案:

答案 0 :(得分:1)

COM组件中一个非常常见的错误是作者在创建新版本的组件时忘记更改LIBID或二进制类型库版本。他改变了库的[helpstring]属性,但这只是人类的一个字符串,在编译或运行时没有任何作用。这是一个错误,比忘记改变CLSID guids要严重得多。由于类型库不是在运行时常用的类型库,因此组件在运行时仍然可以正常工作。但是,当您使用工作线程中的组件时,可能会遇到麻烦。

但是在dev机器上,注册旧版本将覆盖TypeLib注册表项中的条目。换句话说,你只能看到你最后注册的那个。作者很容易错过,他通常只会使用最新版本。

这是你应该深入研究的事情。鉴于他忘了改变LIBID,他可能也忘记了改变CLSID和IID guids。这会产生肆虐的DLL Hell,你的程序可能会在运行时获得错误的组件版本而不会注意到。总是非常难以排除故障,最终用户往往是不幸的受害者。从Visual Studio命令提示符运行OleView.exe并使用文件>在旧的和新的DLL上查看Typelib。将类型库反编译回IDL,你可以清楚地看到guid。仔细检查guid是否已经改变。

让作者知道这个错误,给他发一封电子邮件。他不能再解决这个旧的错误了,但他至少可以在未来做好准备。同时,重新注册要定位的组件版本是一种解决方法。你有很多有充分理由只使用最后一个版本。