旧代码库中的新COM组件不会公开新属性

时间:2012-05-15 14:31:22

标签: c# vb.net visual-studio com-interop gac

我自己回答这个问题,因为我在任何地方都找不到答案,这是我最喜欢的在线编程参考。希望它可以帮助别人。

我维护一个使用第三方COM组件的WinForms应用程序。我们最近升级到具有一些其他属性/功能的组件的新版本(所有旧属性都完好无损),但我无法让Visual Studio检测新属性。它的作用非常类似于挂在对旧版本组件的引用上。以下是我尝试清除它的步骤:

  • 删除了正在使用该组件的表单(首先复制出代码)。此表单上唯一的控件是第三方组件。
  • 删除了对旧组件的引用
  • 删除了解决方案目录中的bin和obj文件夹,以便在添加新控件时新创建PIA
  • 卸载旧组件,安装新组件
  • 打开解决方案,添加对新组件的引用
  • 在应用程序中添加了一个表单,将组件放到表单上并给它与旧控件具有相同的名称(这样应用程序的其余部分就不必重构了
  • 将表单代码粘贴回原位

此时应用程序将编译并运行,但我无法获取Intellisense来检测新属性,如果我将它们放在适当的位置,应用程序将无法编译。我尝试的任何东西都不会显示新的属性。

1 个答案:

答案 0 :(得分:1)

当我们部署应用程序时,我们将组件的PIA安装到GAC。好吧,我已经在我的PC上运行了应用程序的安装程序,我在GAC中有一份PIA副本,这是Visual Studio在编译时使用的。将其从GAC中删除并重新创建PIA后,新属性开始显示。