保持COM公开程序集与.NET引用程序集同步的最佳方式



我有一个C#、COM公开的.NET程序集,我大量使用它作为VB6客户端(Office VBA)的库。我对此非常满意。

在我编写的一些较新的.NET客户端中,同样的COM公开库对我很有用。通过谷歌搜索,人们一致认为,实现这一点的唯一方法是引用.NET库本身(链接1,链接2),我已经这样做了。

当部署这些.NET应用程序时,VS自然希望将我的COM.NET程序集与它们一起使用。但是,我现在有几个COM程序集的独立副本在.NET应用程序中浮动——此外,它还在相关计算机上注册为COM对象。

这意味着,每次我对COM进行错误修复或添加功能时,我都需要更新这些"浮动"副本;这使得维护充其量是令人讨厌的。我想为所有使用它的应用程序公开我需要的功能一次(这不是COM的目的吗?!)

我试着使用后期绑定来激活COM,希望我能解决这个问题——但我在两台不同的机器上得到了不同的行为,所以我决定放弃这个想法。

有没有一种优雅的方法来处理这个问题?我认为在安装时将COM程序集注册到GAC中可能是有意义的,但这似乎是错误的做法,因为它已经注册为COM(此外,在GAC中注册似乎不是一种好做法)。

我认为管理此场景的最简单方法是将COM程序集作为一个单独的部署来分发,该部署将程序集安装到GAC。将程序集引用添加到.NET项目时,请确保该引用的"复制本地"属性设置为False。此操作告诉.NET内部版本不要在部署中包含程序集的副本,这可确保部署的.NET应用程序和VB6应用程序都引用相同的版本(安装在GAC中并注册到COM服务的版本)

最新更新