web-dev-qa-db-fra.com

Quelle est la différence entre les types d'interopérabilité Embed true et false dans Visual Studio?

Dans Visual Studio, lors de l'ajout d'une référence au projet, la fenêtre de propriétés a une option Embed Inteop Types, devrions-nous la définir sur True ou False? Quelle est la différence?

Étant donné que nous avons beaucoup de projets, parmi ceux-ci, la référence a été définie sur False, les autres sur True, c'est totalement raté. Et le serveur bulid a également les mêmes avertissements:

Que signifie “référence à l'assemblage d'interopérabilité incorporé”?

Nous prévoyons donc de changer tous les Embed Inteop Types en False, quel risque aurions-nous?

107
Jerry Bian

Cette option a été introduite afin de supprimer la nécessité de déployer de très grands PIA (assemblages d’interopérabilité primaire) pour interop.

Il incorpore simplement le code de pontage géré utilisé qui vous permet de parler à des assemblys non gérés, mais au lieu de tout incorporer, il crée uniquement les éléments que vous utilisez réellement dans le code.

Lisez plus dans le blog de Scott Hanselman à ce sujet et d'autres améliorations de VS here .

Quant à savoir si cela est conseillé ou non, je ne suis pas sûr car je n'ai pas besoin d'utiliser cette fonctionnalité. Une recherche rapide sur le Web donne quelques pistes:

Le seul risque de les transformer en faux est davantage lié aux problèmes de déploiement avec les fichiers PIA et à un déploiement plus important si certains de ces fichiers sont volumineux.

71
Adam Houldsworth

J'ai remarqué que lorsqu'il est défini sur false, je peux voir la valeur d'un élément à l'aide du débogueur. Lorsqu'il était défini sur true, j'obtenais une erreur - item.FullName.GetValue Le type d'interopérabilité incorporé 'FullName' ne contient pas de définition pour 'QBFC11Lib.IItemInventoryRet' car il n'était pas utilisé dans l'assembly compilé. Pensez à transtyper en objet ou à changer la propriété 'Embed Interop Types' en true.

7
user890332