Je crée une application web sur le framework .NET 4.0 (beta2) en C #.
Lorsque j'essaie d'utiliser un assembly appelé "ActiveHomeScriptLib", j'obtiens l'erreur suivante:
Le type d'interopérabilité 'ActiveHomeScriptLib.ActiveHomeClass' ne peut pas être incorporé. Utilisez plutôt l'interface applicable.
Lorsque je change le framework en 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?
Réponses:
.NET 4.0 permet aux assemblys d'interopérabilité principaux (ou plutôt, les morceaux dont vous avez besoin) d'être incorporés dans votre assemblage afin que vous n'ayez pas besoin de les déployer avec votre application.
Pour une raison quelconque, cet assemblage ne peut pas être intégré - mais il semble que ce ne soit pas un problème pour vous. Ouvrez simplement l'onglet Propriétés de l'assembly dans Visual Studio 2010 et définissez "Incorporer les types d'interopérabilité" sur "Faux".
EDIT: Voir également la réponse de Michael Gustus , supprimant le
Class
suffixe des types que vous utilisez.la source
embed interop types
propriété mentionnée ci-dessus afalse
fait l'affaire. Dans mon cas - je travaillais avec laMicrosoft.Office.Interop.Excel
bibliothèque et j'avais besoin d'accéder à l'objet Workbook. Utiliser son interfaceWorkbook
(en fait. Convention de dénomination ...) n'était pas une option - j'ai reçuCOM object
, pas ce que je voulaisMicrosoft.Office.Interop.Excel.WorkbookClass
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 démarrant Excel:
En règle générale, dans .NET 4, il vous suffit de supprimer le suffixe «Class» et de compiler le code:
Une explication MSDN est ici .
la source
Comme Jan Il m'a fallu un certain temps pour l'obtenir .. = S Donc pour tous ceux qui sont aveuglés par la frustration.
la source
Voici où définir l'interopérabilité d'intégration dans Visual Studio 2012
la source
Développant la bonne réponse 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 fonctionnalité "Intégrer les types d'interopérabilité" fonctionne en reliant essentiellement statiquement tous les types d'un PIA (assemblage d'interopérabilité principal) à l'assemblage de référence, ce qui supprime la surcharge de déploiement.
Cette fonctionnalité fonctionne très bien pour la plupart des types dans un PIA mais elle a des restrictions. L'un d'eux est que vous ne pouvez pas intégrer de classes (c'est un problème de maintenance). Misha a un article de blog détaillé sur les raisons pour lesquelles cela n'est pas autorisé
la source
Vous avez la solution
Allez dans les références, faites un clic droit sur la DLL souhaitée, vous obtiendrez l'option "Intégrer les types d'interopérabilité" à "Faux" ou "Vrai".
la source
J'ai rencontré ce problème lors du retrait d'un projet TFS sur ma machine locale. Apparemment, cela fonctionnait bien sur la machine du gars qui l'avait écrit. J'ai simplement changé ça ...
Pour ça...
Maintenant, cela fonctionne comme un champion!
la source
J'ai eu le même problème dans VB.NET 2013 avec Office 2007, et cela l'a résolu:
Projet VS 2013 VB.NET> Accessoires> Réf.> Bibliothèque d'objets Microsoft Word 12.0> Incorporer les types d'interopérabilité: changez Vrai en Faux
la source
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 de l'assembly Interop TestStand dans la section références de votre projet dans l'Explorateur de solutions. Recherchez la propriété Embed Interop Types dans le navigateur de propriétés et remplacez la valeur par False
la source
Visual Studio 2017 version 15.8 a permis d'utiliser la PackageReferencesyntax pour référencer des packages NuGet dans des projets Visual Studio Extensibility (VSIX). Cela rend beaucoup plus simple de raisonner sur les packages NuGet et ouvre la porte à un package méta complet contenant l'intégralité du VSSDK.
L'installation ci-dessous du package NuGet résoudra le problème EmbedInteropTypes .
la source