2013-03-27 64 views
4

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

+0

创建一个构建步骤来重新生成它,具体取决于COM DLL?它可以在COM DLL上选择更改的时间戳以触发重建。 – Rup 2013-03-27 11:53:57

+0

嗯,我的意思是Intellisense的prebuild更新:是否VS捕获外部重新引用的COM对象? – ilya 2013-03-27 12:20:56

回答

1

如果我正确地理解了你,你有一个COM服务器(显然是进程内/ DLL),它托管你正在更新的对象。当你还没有编译COM服务器时,你希望通过客户端项目中的IntelliSense提供这些更新,对吗?

如果是这样:这是不可能的。让我来描述为什么:

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

无论您何时更改COM服务器,您都需要注册(使用regsvr32),以便更改对客户端(在本例中为tlbimp)“可见”。然后,您必须重新添加对.NET项目的引用,这会导致tlbimp生成一个IntelliSense可以理解的新Interop DLL。这就是处理在.NET环境COM ...

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

  1. 在您的服务器项目,在生成后事件调用tlbimp,并让它创建Primary Interop Assembly
  2. 将PIA自动部署到GAC
  3. 在您的客户项目(.NET项目)中,引用PIA。
  4. 每当你已经建立一个新的服务器项目,刷新了智能感知缓存在您的客户端项目(“编辑” - >“智能感知” - >“刷新本地缓存”,或按Ctrl ++[R)。

希望这会有所帮助!

+1

谢谢,我明白.Net包装需要重建,我必须重新添加引用。 – ilya 2013-04-03 07:22:50