2010-06-07 6 views
5

J'essaie d'ajouter la bibliothèque d'objets ActiveX Microsoft Excel 11.0 à mon projet .NET. Cela fonctionne bien sur mon ordinateur, mais quand je vérifie mon code, cela ne fonctionne pas sur mon collègue. Fixé sur le sien et il a cassé le mien. Lorsqu'ils sont ajoutés, les espaces de noms sont différents entre nos machines.Excel COM Interop - tlbimp vs primary WrapperTool

Il s'avère que la différence est que lorsque j'ajoute la référence, il utilise tlbimp comme WrapperTool, mais pour lui cela en fait une référence primary.

Comment puis-je le faire fonctionner pour nous deux de la même manière? Sa machine n'aime pas un tlbimp interop importé, et le mien n'aime pas un primary interop.

Répondre

4

nous avons eu un problème similaire, et l'option "tlbimp" a fonctionné sur tous les ordinateurs. Ma compréhension (imparfaite) est: .NET utilise des assemblys wrapper pour accéder aux composants COM. Si vous spécifiez "primary", vous utilisez un "assembly d'interopérabilité primaire" pré-généré. Selon http://msdn.microsoft.com/en-us/library/hfac4fky.aspx, "les assemblages d'interopérabilité primaires sont fournis par le même éditeur que la bibliothèque de types qu'ils décrivent". Si l'utilisation de "primary" ne fonctionne pas pour vous, cet assembly n'existe pas sur votre ordinateur.

La valeur par défaut est "tlbimp" et (d'après ce que j'ai compris) devrait normalement fonctionner. Si cela ne fonctionne pas sur la machine de votre collègue, le message d'erreur serait utile. Des erreurs ont été signalées pour VS2003 (recherchez l'article de la base de connaissances "Vous recevez un message d'erreur lorsque vous ajoutez une référence à un objet COM dans Visual Studio .NET après avoir installé Windows XP Service Pack 2"), mais je ne sais pas aux versions actuelles de VS. Si vous ne pouvez pas faire ce travail, je suggère que vous pourriez en savoir plus sur "Primary Interop Assemblies" et essayer de trouver où l'assembly interop primaire pour Excel est situé sur la machine de votre collègue, puis copiez-le sur les machines de tous les développeurs.

Espérons que cela aide.

+0

Merci. Cela m'a aidé. –

+0

J'ai supprimé la référence COM, puis l'ai rajoutée. Lorsque je l'ai ajouté, le WrapperType attribué à la valeur que vous avez mentionnée. Puis tout a fonctionné. –

0

j'ai pu résoudre ce problème en éditant le registy:

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

Ce existait, et j'ajouté la valeur de chaîne suivante:

Nom: PrimaryInteropAssemblyName
Valeur: bureau, version = 12.0.0.0, Culture = neutral, PublicKeyToken = 71e9bce111e9429c

Questions connexes