Excel COM Interop - tlbimp vs primary WrapperTool

时间:2010-06-07 17:31:51

标签: .net interop com-interop office-interop

我正在尝试将ActiveX Microsoft Excel 11.0对象库添加到我的.NET项目中。它在我的计算机上工作正常,但是当我检查我的代码时,它对我的​​同事不起作用。固定在他身上,它打破了我的。添加后,我们的计算机之间的命名空间也不同。

事实证明,不同之处在于,当我添加引用时,它使用tlbimp作为WrapperTool,但对于他而言,它使其成为primary引用。

我如何以同样的方式让它们同时适用于我们?他的机器不喜欢tlbimp导入的互操作,而我的机器不喜欢primary互操作。

2 个答案:

答案 0 :(得分:4)

我们遇到了类似的问题,选项“tlbimp”适用于所有计算机。

我的(不完美)理解是:.NET使用包装器程序集来访问COM组件。如果指定“primary”,则使用现有的预生成“主互操作程序集”。根据{{​​3}},“主要互操作程序集由与它们描述的类型库相同的发布者提供”。如果使用“primary”不适合您,则计算机上不存在此程序集。

默认为“tlbimp”和(从我收集的内容)通常应该起作用。如果它对您的同事的机器不起作用,则错误消息将有所帮助。报告了VS2003的错误(搜索知识库文章“在安装Windows XP Service Pack 2后在Visual Studio .NET中添加对COM对象的引用时收到错误消息”),但我不知道这是否适用到当前版本的VS。

如果您无法完成这项工作,我建议您可以阅读有关“主互操作程序集”的更多信息,并尝试查找Excel的主互操作程序集位于同事的计算机上的位置,然后将其复制到所有计算机上开发者。

希望这有帮助。

答案 1 :(得分:0)

我能够通过编辑注册表来解决这个问题:

HKEY_CLASSES_ROOT \类型库{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52} \ 2.4

这已存在,我添加了以下字符串值:

名称: PrimaryInteropAssemblyName
价值:办公室,版本= 12.0.0.0,文化=中立,PublicKeyToken = 71e9bce111e9429c