IT-Swarm.Net

Ο τύπος Interop δεν μπορεί να ενσωματωθεί

Δημιουργώ μια εφαρμογή στο .NET 4.0 (beta2) στο C #.

Όταν προσπαθώ να χρησιμοποιήσω μια συνέλευση που ονομάζεται "ActiveHomeScriptLib", έχω το ακόλουθο σφάλμα:

Ο τύπος Interop 'ActiveHomeScriptLib.ActiveHomeClass' δεν μπορεί να ενσωματωθεί. Χρησιμοποιήστε την αντίστοιχη διεπαφή.

Όταν αλλάζω το πλαίσιο στην έκδοση 3.5, δεν έχω λάθη.

Τι είναι ένας τύπος Interop και γιατί συμβαίνει αυτό μόνο όταν χρησιμοποιώ το πλαίσιο 4.0;

632
Jan

Το .NET 4.0 επιτρέπει στα πρωτεύοντα σύνολα interop (ή μάλλον, τα bits που χρειάζεστε) να ενσωματωθούν στη Συνέλευση σας, ώστε να μην χρειάζεται να τα αναπτύξετε παράλληλα με την εφαρμογή σας.

Για οποιονδήποτε λόγο, αυτή η Συνέλευση δεν μπορεί να ενσωματωθεί - αλλά αυτό ακούγεται σαν να μην είναι πρόβλημα για εσάς. Ανοίξτε την καρτέλα Ιδιότητες για τη συνέλευση στο Visual Studio 2010 και ορίστε "Ενσωμάτωση τύπων Interop" σε "False".

EDIT: Δείτε επίσης την απάντηση του Michael Gustus, καταργώντας το επίθημα Class από τους τύπους που χρησιμοποιείτε.

1010
Jon Skeet

Στις περισσότερες περιπτώσεις, αυτό το σφάλμα είναι το αποτέλεσμα κώδικα που προσπαθεί να δημιουργήσει ένα αντικείμενο COM. Για παράδειγμα, εδώ είναι ένα κομμάτι κώδικα εκκίνησης Excel:

Excel.ApplicationClass xlapp = new Excel.ApplicationClass();

Συνήθως, στο .NET 4 απλά πρέπει να αφαιρέσετε το επίθημα 'Class' και να συντάξετε τον κώδικα:

Excel.Application xlapp = new Excel.Application();

Μια εξήγηση του MSDN είναι εδώ .

460
Michael Gustus

Όπως και ο Jan Μου πήρε λίγο χρόνο για να το πάρει .. = S Έτσι για οποιονδήποτε άλλον που τυφλώθηκε με απογοήτευση.

  • Κάντε δεξί κλικ στο παράνομο Συνέδριο που προσθέσατε στον Explorer Explorer στο έργο σας Αναφορές. (Στην περίπτωση μου WIA)
  • Κάντε κλικ στις ιδιότητες.
  • Και θα πρέπει να υπάρχει η επιλογή εκεί για Ενσωμάτωση της συναρμολόγησης Interop.
  • Ρυθμίστε το σε Ψεύτικο
113
gideon

Επέκταση στη σωστή απάντηση του Jon.

Το πρόβλημα εδώ είναι ότι συνδυάζετε τη νέα λειτουργία "Ενσωμάτωση Εντύπων Interop" (ή NoPIA) με χρήση ενός τύπου κλάσης. Η λειτουργία "Embed Interop Types" λειτουργεί ουσιαστικώς συνδέοντας στατικά σε όλους τους τύπους από μια PIA (Primary Interop Assembly) στη συγκρότηση αναφοράς που αφαιρεί τα γενικά έξοδα της ανάπτυξης της.

Αυτό το χαρακτηριστικό λειτουργεί καλά για τους περισσότερους τύπους σε ένα PIA αλλά έχει περιορισμούς. Ένα από αυτά είναι ότι δεν μπορείτε να ενσωματώσετε μαθήματα (πρόκειται για ζήτημα εξυπηρέτησης). Ο Misha έχει ένα λεπτομερές άρθρο σχετικά με το γιατί αυτό δεν επιτρέπεται

32
JaredPar

Εδώ μπορείτε να ορίσετε το Embed Interop στο Visual Studio 2012

enter image description here

29
VK_217

Πήρε τη λύση

Πηγαίνετε στις αναφορές κάντε δεξί κλικ στο επιθυμητό dll θα λάβετε την επιλογή "Embed Interop Types" σε "False" ή "True".

12
Navdeep

Έτρεξα σε αυτό το ζήτημα όταν τραβήξαμε ένα έργο TFS στην τοπική μηχανή μου. Προφανώς, δούλευε καλά στη μηχανή του ατόμου που το έγραψε. Απλώς άλλαξα αυτό ...

WshShellClass shellClass = new WshShellClass();

Σε αυτό...

WshShell shellClass = new WshShell();

Τώρα, δουλεύει σαν πρωταθλητής!

9
Zach

Είχα το ίδιο πρόβλημα στο VB.NET 2013 με το Office 2007 και αυτό το λυθεί:

VS 2013 Πρόγραμμα VB.NET> Props> Refs> Microsoft Word 12.0 Object Lib> Ενσωμάτωση τύπων Interop: Αλλαγή True σε False

2
Doug Null

http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307

Αυτό το σφάλμα παρουσιάζεται επειδή η προεπιλεγμένη τιμή είναι αληθής για την ιδιότητα Embed Interop Types της Συλλογής Interop της TestStand που αναφέρεται στο νέο έργο. Για να επιλύσετε αυτό το σφάλμα, αλλάξτε την τιμή της ιδιότητας Embed Interop Types σε False ακολουθώντας τα εξής βήματα: Επιλέξτε την αναφορά της Συναρμολόγησης TestStand Interop στην ενότητα αναφορών του έργου σας στον Explorer Solution. Εντοπίστε την ιδιότητα "Ενσωμάτωση ενοποιημένων τύπων" στο πρόγραμμα περιήγησης ιδιοτήτων και αλλάξτε την τιμή σε "False"

1
Ramezani r