我正在尝试将ActiveX Microsoft Excel 11.0对象库添加到我的.NET项目中。它在我的计算机上工作正常,但是当我检查我的代码时,它对我的同事不起作用。固定在他身上,它打破了我的。添加后,我们的计算机之间的命名空间也不同。
事实证明,不同之处在于,当我添加引用时,它使用tlbimp
作为WrapperTool,但对于他而言,它使其成为primary
引用。
我如何以同样的方式让它们同时适用于我们?他的机器不喜欢tlbimp
导入的互操作,而我的机器不喜欢primary
互操作。
答案 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