interop dll如何轻松更新?

Posted

技术标签:

【中文标题】interop dll如何轻松更新?【英文标题】:How can interop dll be easily updated? 【发布时间】:2013-03-17 11:42:09 【问题描述】:

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

【问题讨论】:

创建一个构建步骤来重新生成它,取决于 COM DLL?它可以获取 COM DLL 上更改的时间戳以触发重建。 好吧,我的意思是 Intellisense 的预构建更新:VS 是否捕获外部重新注册引用的 COM 对象? 【参考方案1】:

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

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

IntelliSense 仅为项目的引用构建文档缓存。引用 COM 服务器与引用 .NET 项目不同。对于 .NET 项目,它能够直接从代码模型构建文档缓存。但是 COM 服务器通常是用一种语言描述的,编译器不知道! tlbimp 生成一个 .NET 包装器,它会为您调用 COM 服务器。 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如何轻松更新?的主要内容,如果未能解决你的问题,请参考以下文章

如何引用 Microsoft.Office.Interop.Excel dll?

无法加载 DLL 'SQLite.Interop.dll

访问 Microsoft.Office.Interop.Word.dll?

添加一个新组件,啥是 Interop.dll 文件?

无法加载DLL'SQLite.Interop.dll

interop.MODI.dll 在 Windows Server 2012 中不起作用