2011-11-06 3 views
2

J'ai un fichier .OCX que j'ai converti en assembly interop par Visual Studio 2010 tools (tlbimp). Quand je veux ajouter la DLL créée à mon projet .NET, je reçois l'exception ci-dessous:Pourquoi ne puis-je pas utiliser l'assembly interop créé par TLBIMP dans .NET?

« dllname.dll », ou un de ses dépendances, nécessite une version ultérieure de le .NET Framework que le sur spécifié dans le projet. Vous pouvez modifier la cible .NET Framework en cliquant sur Propriétés dans le menu projet puis en sélectionnant une nouvelle cible dans la zone de liste déroulante '.NET Framework'.

Quelqu'un a déjà eu l'expérience à ce sujet?

+2

Eh bien, quelle version de .net ciblez-vous? Et quelles options avez-vous utilisé avec tlbimp? Probablement, il a inclus quelque chose 4.0 "dynamique" ou des arguments facultatifs, et vous ne ciblez pas 4.0. Pouvez-vous être plus précis s'il vous plaît? –

+0

Mon projet est basé sur .NET Framework 4.0 et tlbimp n'a pas d'option pour spécifier la version du framework .NET. –

+1

est-ce le cadre complet? Silverlight? Profil client? Xna? Quelle? –

Répondre

4

Je REPRO que, bien qu'il ne soit pas facile:

enter image description here

La seule façon de l'obtenir est d'exécuter Tlbimp.exe à partir de Visual Studio 2010 invite de commandes et ayant la cible Paramètre de cadre ciblant une version antérieure de .NET. Vérifiez trois fois ce paramètre. Il y a quelque chose de sérieusement cassé dans votre configuration si le paramètre sélectionne .NET 4.

La meilleure souricière est de créer la bibliothèque interop avec l'IDE. Projet + Ajouter une référence, onglet Parcourir et sélectionnez le fichier .ocx ici. Lorsque vous modifiez le framework cible maintenant, la bibliothèque interop est automatiquement recréée pour correspondre à la version CLR. Vous pouvez vérifier tout cela en exécutant ildasm.exe sur la bibliothèque interop. Double-cliquez sur le manifeste, il vous montre la version CLR cible dans la première ligne:

// Metadata version: v4.0.30319 
.assembly extern mscorlib 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .ver 4:0:0:0 
} 

Last but not least, vous voulez vraiment avoir la propriété « Intégrer Interop Types » de la bibliothèque interop la valeur True si vous n Pas besoin d'expédier la librairie interop. Si vous ne trouvez pas cette propriété dans la fenêtre Propriétés, vous avez une autre indication que le paramètre de structure cible n'est pas ce que vous pensez être.

Questions connexes