Excel COM互操作 - tlbimp与主要WrapperTool的区别

9
我试图将ActiveX Microsoft Excel 11.0对象库添加到我的.NET项目中。在我的电脑上可以正常工作,但是当我检查代码时,它在我的同事的电脑上不起作用。我在他的电脑上解决了这个问题,但导致我的电脑出现了问题。添加后,我们两台机器之间的命名空间不同。
原来这个问题的区别在于,当我添加引用时,它使用tlbimp作为WrapperTool,而对于他来说,则使其成为主要引用。
我该如何使它以相同的方式适用于我们两个人?他的机器不喜欢使用tlbimp导入的互操作性,而我的则不喜欢主要互操作性。
2个回答

8
我们曾经遇到过类似的问题,选项“tlbimp”在所有计算机上都有效。
我的(不完美的)理解是:.NET使用包装器程序集来访问COM组件。如果您指定“primary”,则使用现有的预生成的“主互操作程序集”。根据http://msdn.microsoft.com/en-us/library/hfac4fky.aspx,“主要互操作程序集由与它们描述的类型库相同的发布者提供”。如果使用“primary”对您无效,则此程序集不存在于您的计算机上。
默认值为“tlbimp”,并且(据我所知)通常应该有效。如果在您的同事的计算机上无法工作,则错误消息将非常有用。关于VS2003报告了错误(搜索KB文章“You receive an error message when you add a reference to a COM object in Visual Studio .NET after you install Windows XP Service Pack 2”),但我不知道是否适用于当前版本的VS。
如果您无法使其正常工作,我建议您可以了解更多有关“主互操作程序集”的知识,并尝试查找 Excel 的主互操作程序集在您同事的计算机上的位置,然后将其复制到所有开发人员的计算机上。
希望这能帮到您。

谢谢。这对我很有帮助。 - Jeremy Ray Brown
我移除了COM引用,然后重新添加它。当我添加它时,WrapperType属性更改为您提到的值。然后一切正常工作。 - Jeremy Ray Brown

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

HKEY_CLASSES_ROOT\TypeLib{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.4

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

名称: PrimaryInteropAssemblyName
值: office, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接