如何轻松更新interop dll?

时间:2013-03-27 11:48:50

标签: .net visual-studio com com-interop tlbimp

假设我们在VS 2005(VB .Net)中有一个.NET项目。 该项目使用非GUI COM对象。当我添加对该对象的引用时,VS创建interop dll。但是我在另一个项目中向COM对象添加了新方法。如何在不明确调用tlbimp的情况下更新interop dll?我希望Intellisense显示此COM对象中的新方法列表。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,那么您正在拥有一个COM服务器(显然是进程内/ DLL),它承载您正在更新的对象。并且您希望在尚未编译COM服务器的情况下通过客户端项目中的IntelliSense提供这些更新,对吗?

如果是这样:这是不可能的。让我来说明原因:

IntelliSense仅为项目的引用构建文档缓存。引用COM服务器与引用.NET项目不同。对于.NET项目,它可以直接从代码模型构建文档缓存。但是COM服务器通常用一种语言描述,编译器不知道! tlbimp生成一个.NET包装器,为您调用COM服务器。 IntelliSense能够理解包装器(互操作DLL,它只不过是一个自动生成的.NET DLL),而不是它实际上做的事情。所以你总是需要保持包装器的最新状态。

每当您对COM服务器进行更改时,都需要注册它(使用regsvr32),以便更改对客户端“可见”(在本例中为tlbimp)。然后,您必须重新添加对.NET项目的引用,这会导致tlbimp生成一个新的互操作DLL,IntelliSense可以理解。这是在.NET环境下与COM的交易...

但是,您可以尝试进一步自动化构建过程:

  1. 在您的服务器项目中,在构建后的事件中调用tlbimp,然后让它创建Primary Interop Assembly
  2. 自动将PIA部署到GAC
  3. 在您的客户端项目(.NET项目)中,参考PIA。
  4. 每次构建新服务器项目时,请刷新客户端项目中的IntelliSense缓存(“编辑” - >“智能感知” - >“刷新本地缓存”或 Ctrl + Shift + R )。
  5. 希望这有帮助!