假设我们在VS 2005中有一个.NET项目(VB .Net)。 该项目使用非GUI COM对象。当我添加对这个对象的引用时,VS创建互操作dll。但是我在另一个项目中向COM对象添加了新的方法。如何在没有明确调用tlbimp
的情况下更新interop dll?我希望Intellisense在此COM对象中显示新方法的列表。interop dll如何轻松更新?
4
A
回答
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 ...
但是你可以尝试一点点进一步自动化构建过程:
- 在您的服务器项目,在生成后事件调用
tlbimp
,并让它创建Primary Interop Assembly。 - 将PIA自动部署到GAC。
- 在您的客户项目(.NET项目)中,引用PIA。
- 每当你已经建立一个新的服务器项目,刷新了智能感知缓存在您的客户端项目(“编辑” - >“智能感知” - >“刷新本地缓存”,或按Ctrl +移+[R)。
希望这会有所帮助!
+1
谢谢,我明白.Net包装需要重建,我必须重新添加引用。 – ilya 2013-04-03 07:22:50
相关问题
- 1. iOS数据存储和轻松更新
- 2. 如何轻松地重新排序TabControl?
- 3. 如何更轻松地使用reCAPTCHA?
- 4. 如何更轻松地编辑内容?
- 5. 实体如何轻松更新? (EF代码优先,MVC3)
- 6. 如何轻松将更新推送到服务器?
- 7. Rails,如何轻松更新带有+1的Table.field整数
- 8. 如何设计软件以轻松合并更新?
- 9. vmware如何轻松安装?
- 10. 的Flex 4:遍历舞台更轻松
- 11. 轻松更改型号名称
- 12. 如何轻松开发android UI?
- 13. 如何轻松写这种文档?
- 14. 如何轻松创建xml架构
- 15. 如何轻松地处理在WPF
- 16. 如何轻松禁用fancybox幻灯片?
- 17. 如何轻松切换Webrat和Selenium?
- 18. 如何轻松过滤我的查询
- 19. 如何在Windows上轻松安装xgboost
- 20. Android:如何实现“Facebook轻松登录”?
- 21. 如何 - 轻松过滤cakephp表
- 22. 如何轻松打印贴纸(彩色)
- 23. 如何轻松避免Tkinter冻结?
- 24. 如何轻松记录XML-RPC流量?
- 25. 如何轻松剖析JavaScript的链接?
- 26. 如何轻松解析此字符串?
- 27. jQuery.ajax:我如何轻松发送数据?
- 28. 如何“轻松”拉所有分支?
- 29. 如何轻松填写表单字段?
- 30. 如何轻松开发print css?
创建一个构建步骤来重新生成它,具体取决于COM DLL?它可以在COM DLL上选择更改的时间戳以触发重建。 – Rup 2013-03-27 11:53:57
嗯,我的意思是Intellisense的prebuild更新:是否VS捕获外部重新引用的COM对象? – ilya 2013-03-27 12:20:56