Visual Studio 2010, TlbImp génère .net 4.0 interops dans les projets 2.0
Dans un projet C# nous ajouter une référence à un objet COM via l'Ajout de Références d'installation pointant vers un objet COM qui résultats dans l'IDE auto-générer l'assembly interop. Donc, c'est bel et bon, mais que nous construisons sur la base .net 3.5 SP1 aka CLR 2.0, et les interops sont à l'aide de la CLR 4.0 les rend incompatibles. Est-il un moyen pour éviter cela?
Je suppose que l'autre option est de configurer le script de construction d'essayer d'utiliser tlbimp.exe avec la /les références paramètre? du point de mscorlib v2.0?
De toute façon, je l'espère, il y a un drapeau quelque part pour permettre cela.
Vous devez vous connecter pour publier un commentaire.
J'ai rencontré exactement ce problème. La solution que j'ai trouvé est d'utiliser la version 3.5 de tlbimp de la .Net Framework SDK (ou Windows kit de développement Platform SDK?) situé dans le répertoire %ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin utilisé CLR 2.
J'ai aussi trouvé que j'avais besoin de cette info pour obtenir le bon type de bibliothèque à partir du fichier exe, j'ai été à l'importation, comme VS serait d'utiliser seulement la première bibliothèque de type:
"Un ID de ressource peuvent être ajoutés à un fichier de bibliothèque de type lors de l'importation d'une bibliothèque de types à partir d'un module contenant plusieurs bibliothèques de types."
tlbimp MyModule.dll\1
de http://msdn.microsoft.com/en-us/library/tt0cf3sx%28VS.80%29.aspx
La solution au problème consiste à configurer tlbimp.exe pour s'exécuter sous le 2.0 .NET runtime version.
Ajouter les lignes suivantes au fichier dans la section de configuration:
Enregistrer le fichier, puis exécutez l'tlbimp.exe exécutable comme vous le feriez normalement.
Si vous utilisez Construire des Événements, essayez ceci:
$(SDK35ToolsPath) points de C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin
Et si vous le souhaitez pour référence 4.0, $(SDK40ToolsPath), c'est la macro qui points à C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Outils.
Dans VS 2010 en ligne de commande, "où tlbimp" montrera tlbimp.exe dans NETFX 4.0 dossier d'Outils de première. Nous avons donc besoin d' $(SDK35ToolsPath) pour 3,5 tlbimp.exe.
J'ai eu exactement le même problème, mais même avec v2.0 de tlbimp.exe je reçois toujours un 4.0 dll, ce qui ne fonctionne pas.
J'ai fini avec une solution plus simple, au cas où quelqu'un se jette dans cette:
Enregistrer le fichier dll avec regsvr32 (assurez-vous que vous exécutez en tant qu'administrateur ou vous aurez une erreur), puis lors de l'ajout de la référence dans le projet, vous trouverez votre dll dans l'onglet COM.
A travaillé comme un charme!
Sauf si vous voulez créer la dll de l'interopérabilité pour l'expédier avec votre application, vous aurez besoin de comprendre à la tlbimp.exe l'itinéraire.
Pour moi (Visual Studio 2013) c'était juste une question de TlbImp exécutable.
Trouver celui que vous utilisez par défaut:
where tlbimp
Qui pour moi a été
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\TlbImp.exe
Au lieu d'utiliser l'une à partir d'une version inférieure, par exemple
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\tlbimp
qui produit une .Net 2 l'assemblée pour moi, pas besoin d'éditer le fichier de configuration. Vous pouvez utiliser CorFlags sur le fichier exe pour déterminer quoi .Net version qu'il utilise. Ou vous pouvez simplement utiliser Corflags sur votre sortie.
Il suffit d'exécuter
Pour générer un interops de la bibliothèque .Net version 2.0