gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:22:41 27 4
gpt4 key购买 nike

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

最佳答案

如果我对您的理解正确,您将拥有一个 COM 服务器(显然是进程内/DLL),它承载您正在更新的对象。当您尚未编译 COM 服务器时,您希望这些更新可以通过客户端项目中的 IntelliSense 获得,对吧?

如果是这样:这是不可能的。让我描述一下原因:

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

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

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

  • 在您的服务器项目上,调用 tlbimp在构建后事件中,让它创建一个 Primary Interop Assembly .
  • 自动将 PIA 部署到 GAC .
  • 在您的客户端项目(.NET 项目)中,引用 PIA。
  • 每次构建新的服务器项目时,刷新客户端项目中的 IntelliSense 缓存(“编辑”->“智能感知”->“刷新本地缓存”,或 Ctrl + Shift + R)。

  • 希望这可以帮助!

    关于.net - interop dll如何轻松更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15658063/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com