Je crée une application Web sur le framework .NET 4.0 (beta2) en C #.
Lorsque j'essaie d'utiliser un assembly appelé "ActiveHomeScriptLib", le message d'erreur suivant s'affiche:
Le type d'interopérabilité 'ActiveHomeScriptLib.ActiveHomeClass' ne peut pas être incorporé. Utilisez l'interface applicable à la place.
Lorsque je modifie le framework à la version 3.5, je n'ai aucune erreur.
Qu'est-ce qu'un type d'interopérabilité et pourquoi cela ne se produit-il que lorsque j'utilise le framework 4.0?
.NET 4.0 permet aux assemblages d'interopérabilité principaux (ou plutôt aux éléments dont vous avez besoin) d'être incorporés dans votre assemblage afin que vous n'ayez pas besoin de les déployer le long de votre application.
Pour une raison quelconque, cette Assemblée ne peut pas être intégrée - mais il semble que cela ne vous pose pas de problème. Ouvrez simplement l'onglet Propriétés pour l'assemblage dans Visual Studio 2010 et définissez "Intégrer les types d'interopérabilité" sur "Faux".
EDIT: Voir aussi answer de Michael Gustus, supprimant le suffixe Class
des types que vous utilisez.
Dans la plupart des cas, cette erreur est le résultat d'un code qui tente d'instancier un objet COM. Par exemple, voici un morceau de code qui démarre Excel:
Excel.ApplicationClass xlapp = new Excel.ApplicationClass();
En règle générale, dans .NET 4, il vous suffit de supprimer le suffixe "Classe" et de compiler le code:
Excel.Application xlapp = new Excel.Application();
Une explication MSDN est ici .
Comme Jan Il m'a fallu un certain temps pour l'obtenir .. = S Donc pour quiconque aveuglé par la frustration.
Développer la réponse correcte de Jon.
Le problème ici est que vous combinez la nouvelle fonctionnalité "Embed Interop Types" (ou NoPIA) avec l'utilisation d'un type de classe. La fonction "Types d'interopérabilité incorporés" fonctionne essentiellement en liant statiquement tous les types d'un assemblage d'interopérabilité primaire (PIA) à l'assembly de référence, ce qui supprime la surcharge de son déploiement.
Cette fonctionnalité fonctionne très bien pour la plupart des types dans une PIA, mais elle comporte des restrictions. L'une d'elles est que vous ne pouvez pas intégrer de classes (c'est un problème de maintenance). Misha a publié un article de blog détaillé expliquant pourquoi cela n'est pas autorisé
Vous avez la solution
Accédez aux références cliquez avec le bouton droit de la souris sur la dll souhaitée. L'option "Intégrer les types d'interopérabilité" est définie sur "False" ou "True".
Je me suis heurté à ce problème en déposant un projet TFS sur ma machine locale. Il semblerait que cela fonctionnait bien sur la machine du type qui l'a écrit. J'ai simplement changé ça ...
WshShellClass shellClass = new WshShellClass();
Pour ça...
WshShell shellClass = new WshShell();
Maintenant, ça marche comme un champion!
J'ai eu le même problème dans VB.NET 2013 avec Office 2007 et cela l'a résolu:
Projet VB.NET VS 2013> Accessoires> Références> Bibliothèque d'objets Microsoft Word 12.0> Types d'interopérabilité incorporés: remplacez True par False
http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307
Cette erreur se produit car la valeur par défaut est true pour la propriété Embed Interop Types de l'assembly Interop API TestStand référencé dans le nouveau projet. Pour résoudre cette erreur, remplacez la valeur de la propriété Embed Interop Types par False en procédant comme suit: Sélectionnez la référence Assembly Interop TestStand dans la section références de votre projet dans l'explorateur de solutions. Recherchez la propriété Incorporer les types d'interopérabilité dans le navigateur de propriétés et définissez la valeur sur False.
Visual Studio 2017 version 15.8 a rendu possible l'utilisation de PackageReferencesyntax pour référencer les packages NuGet dans les projets Visual Studio Extensibility (VSIX). Cela simplifie beaucoup le raisonnement à propos des paquets NuGet et ouvre la porte à un méta-paquet complet contenant la totalité du VSSDK.
L’installation au-dessous du paquet NuGet résoudra le problème EmbedInteropTypes .
Package d'installation Microsoft.VisualStudio.SDK.EmbedInteropTypes