假设我们在VS 2005(VB .Net)中有一个.NET项目。
该项目使用非GUI COM对象。当我添加对该对象的引用时,VS创建interop dll。但是我在另一个项目中向COM对象添加了新方法。如何在不明确调用tlbimp
的情况下更新interop dll?我希望Intellisense显示此COM对象中的新方法列表。
答案 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的交易...
但是,您可以尝试进一步自动化构建过程:
tlbimp
,然后让它创建Primary Interop Assembly。希望这有帮助!