加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net – 如何轻松更新interop dll?

发布时间:2020-12-14 05:42:09 所属栏目:Windows 来源:网络整理
导读:假设我们在VS 2005(VB .Net)中有一个.NET项目. 该项目使用非GUI COM对象.当我添加对该对象的引用时,VS创建interop dll.但是我在另一个项目中向COM对象添加了新方法.如何在没有显式调用tlbimp的情况下更新interop dll?我希望Intellisense显示此COM对象中的新
假设我们在VS 2005(VB .Net)中有一个.NET项目.
该项目使用非GUI COM对象.当我添加对该对象的引用时,VS创建interop dll.但是我在另一个项目中向COM对象添加了新方法.如何在没有显式调用tlbimp的情况下更新interop dll?我希望Intellisense显示此COM对象中的新方法列表.

解决方法

如果我理解你正确你有一个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.
>自动将PIA部署到GAC.
>在您的客户端项目(.NET项目)中,引用PIA.
>每次构建新的服务器项目时,请刷新客户端项目中的IntelliSense缓存(“编辑” – >“IntelliSense” – >“刷新本地缓存”或Ctrl Shift R).

希望这可以帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读