Setup Project为.NET COM做了什么?

时间:2009-05-13 09:42:43

标签: vb.net visual-studio-2008 com vb6 installation

好的,想象一下使用框架3.5(OS = Win XP)的Visual Studio 2008中最简单的解决方案,其中我添加了一个类库。然后我添加了一个COM类。这个COM类非常简单,只暴露了1个函数:

Public Function SayHello()As String 返回“你好。” 结束功能

我已经构建了这个类库,它生成了.dll和.tlb。我在VB6 app的引用框中看到了.tlb(在同一个comp上),所以我引用它。我打电话给SayHello,运行它,然后......'自动化错误'。

我在某处找到了一篇文章如何创建一个SetUp项目,然后安装.dll。在我使用此安装项目单独安装.dll之后,COM组件在我的VB6应用程序中的工作方式就像它应该的那样。

好的,现在我的问题......为什么?!有人可以向我解释一下设置项目的作用,我显然没有。

P.S。:为了说清楚,它与VB2005和Framework 2.0一起运行良好......但是现在我不能让这个最简单的示例项目起作用。

1 个答案:

答案 0 :(得分:2)

除非您明确指定程序集的类型库的UUID,并且所有暴露于COM的类和接口VS在每次重建时自动更改它们以防止所谓的“COM地狱”(使用UUID的注册表污染)。

在编译VS之前取消注册先前版本的程序集,然后编译程序集并注册新程序集。如果消费者(你的VB应用程序)没有立即重新编译,它现在将无法使用程序集,因为在以前版本的程序集和相应的类型库的注册表中没有数据。

要解决这个问题,你需要为所有暴露于COM的实体明确指定UUID,然后你必须彻底维护二进制兼容性。