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

C# 保持COM公开程序集与.NET引用程序集同步的最佳方法,c#,.net,com,com-interop,C#,.net,Com,Com Interop,我有一个C#,COM公开的.NET程序集,我大量使用它作为VB6客户端(Office VBA)的库。我对此非常满意 在我编写的一些较新的.NET客户端中,相同的COM公开库对我很有用。通过谷歌搜索,人们一致认为唯一的方法是引用.NET库本身(,),我已经这样做了 当部署这些.NET应用程序时,VS自然希望将我的COM.NET程序集与它们一起使用。但我现在有几个独立的COM程序集副本,它们与我的.NET应用程序一起浮动——此外,它们还被注册为相关机器上的COM对象 这意味着每当我修复bug或向CO

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

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

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

这意味着每当我修复bug或向COM添加功能时,我也需要更新这些“浮动”副本;这最多只能让维护变得烦人。我想为所有使用它的应用程序公开我所需的功能一次(这难道不是COM的目的吗?!)

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


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

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