Je suis en train de créer une application web sur le cadre .NET 4.0 (beta2) en C#.
Lorsque j'essaie d'utiliser un assemblage appelé "ActiveHomeScriptLib" ;, j'obtiens l'erreur suivante :
Interop type 'ActiveHomeScriptLib.ActiveHomeClass' ; ne peut pas être incorporé. Utilisez l'interface applicable applicable à la place.
Lorsque je fais passer le framework à la version 3.5, je n'ai pas d'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 d'intégrer les assemblages interop primaires (ou plutôt les éléments dont vous avez besoin) dans votre assemblage, de sorte que vous n'avez 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. Il suffit d'ouvrir l'onglet Propriétés de l'assemblage dans Visual Studio 2010 et de définir l'option "Embed Interop Types" sur "False".
EDIT : Voir également la réponse de Michael Gustus, qui supprime le suffixe Class
des types que vous utilisez.
Comme Jan Il m'a fallu un certain temps pour comprendre... =S Donc pour tous ceux qui sont aveuglés par la frustration.
En développant la bonne réponse de Jon...
Le problème est que vous combinez la nouvelle fonctionnalité "Embed Interop Types" (ou NoPIA) avec l'utilisation d'un type de classe. La fonction "Embed Interop Types" fonctionne essentiellement en liant de manière statique tous les types d'un PIA (Primary Interop Assembly) dans l'assemblage de référence, ce qui supprime les frais de déploiement.
Cette fonctionnalité fonctionne très bien pour la plupart des types d'un PIA, mais elle a 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 rédigé un article de blog détaillé sur les raisons de cette interdiction.