我有一个C#,暴露于COM的.NET程序集,我大量使用它作为VB6客户端(Office VBA)的库。我对它非常满意。
在我编写的一些较新的.NET客户端中,同样的COM暴露库对我很有用。从谷歌搜索来看,共识的唯一方法就是引用我自己的.NET库本身(link 1,link 2)。
当部署这些.NET应用程序时,VS自然希望将COM .NET程序集与它们一起使用。但是我现在有几个独立的COM组件副本和我的.NET应用程序一起浮动 - 除了它在相关机器上注册为COM对象。
这意味着每次我修复错误或向COM添加功能时,我都需要更新这些“浮动”副本;这使维护工作最烦人。我希望为所有使用它的应用程序公开我需要的功能一次(这不是COM的目的吗?!)
我尝试使用后期绑定激活COM,希望我可以解决问题 - 但我在两台不同的机器上有不同的行为,所以我决定放弃这个想法。
有一种优雅的方式来处理这个问题吗?我想也许在安装时在GAC中注册COM程序集是有意义的,但这似乎是错误的,因为它已经注册为COM(另外,似乎在GAC中注册是not considered good practice )。
答案 0 :(得分:1)
我认为管理此方案的最简单方法是将COM程序集分发为将程序集安装到GAC的单独部署。将程序集引用添加到.NET项目时,请确保引用上的“复制本地”属性设置为False。这告诉.NET构建不在部署中包含程序集的副本,这可确保部署的.NET应用程序和VB6应用程序都引用相同的版本(安装在GAC中并使用COM服务注册的版本)