我有一个 C# dll 并使用 regasm 生成了一个 tlb。我已经向使用此 tlb 的用户提供了一个实用程序电子表格。每次发布我们的应用程序的新版本时,都会取消注册并注册(使用 regasm.exe)tlb。
但是,有时,当用户在新版本后使用电子表格时,它会抛出“activex 组件无法创建实例”错误,恰好在我创建某种类型的对象的代码行上。我只是通过删除并添加 tlb 引用来修复此问题。 (在vba模式下-工具-引用-取消选中tlb-保存-然后再次添加)。然而,这很痛苦,因为我无法为所有用户执行此操作。
我做了几次测试来复制这个场景。比如改变dll的版本号并重新注册、向接口(interface)添加新方法并重新注册等。但在所有情况下,电子表格都可以正常工作,无需删除并重新添加 tlb 引用。
因此,我很困惑在电子表格中必须重新添加 tlb 作为引用的情况可能是什么,以及可能的原因是什么。如有任何帮助,我们将不胜感激。
谢谢, 玛尼
最佳答案
该问题很可能是由于类型库的UUID发生变化导致VBA中的引用无效引起的。
1)那边有一个人写了一个VBA program to add TLB references and delete invalid ones !
2) 这可能与您先卸载旧版本然后安装新版本有关。 RegAsm's manual提到相反的顺序。 VBA 可能有一些自动更新它们的逻辑,这只适用于 M$ 人员想到的更新顺序。
另一种可能性是 Excel 在更新期间正在运行,因此它没有按预期更新其引用列表。
3) 为了进一步诊断问题,我将使用 procmon.exe。有关 COM 的所有内容都会在注册表中查找,因此如果出现错误,您可能会遇到应用程序无法找到某些 UUID key 的情况。
关于.net - 发布 Tlb 新版本以及何时需要重新引用 Tlb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9293440/