<p>δημιουργώ μια εφαρμογή στο .net 4.0 (beta2) στο c #.</p><p>όταν προσπαθώ να χρησιμοποιήσω μια συνέλευση που ονομάζεται "activehomescriptlib", έχω το ακόλουθο σφάλμα:</p><blockquote> <p>ο τύπος interop 'activehomescriptlib.activehomeclass' δεν μπορεί να ενσωματωθεί. χρησιμοποιήστε την αντίστοιχη διεπαφή.</p> </blockquote><p>όταν αλλάζω το πλαίσιο στην έκδοση 3.5, δεν έχω λάθη.</p><p>τι είναι ένας τύπος interop και γιατί συμβαίνει αυτό μόνο όταν χρησιμοποιώ το πλαίσιο 4.0;</p>
ο τύπος interop δεν μπορεί να ενσωματωθεί
<p>το .net 4.0 επιτρέπει στα πρωτεύοντα σύνολα interop (ή μάλλον, τα bits που χρειάζεστε) να ενσωματωθούν στη συνέλευση σας, ώστε να μην χρειάζεται να τα αναπτύξετε παράλληλα με την εφαρμογή σας.</p><p>για οποιονδήποτε λόγο, αυτή η συνέλευση δεν μπορεί να ενσωματωθεί - αλλά αυτό ακούγεται σαν να μην είναι πρόβλημα για εσάς. ανοίξτε την καρτέλα ιδιότητες για τη συνέλευση στο visual studio 2010 και ορίστε "ενσωμάτωση τύπων interop" σε "false".</p><p>edit: δείτε επίσης την <a href="https://stackoverflow.com/a/4553402/641833">απάντηση</a> του michael gustus, καταργώντας το επίθημα <code>class</code> από τους τύπους που χρησιμοποιείτε.</p>
<p>στις περισσότερες περιπτώσεις, αυτό το σφάλμα είναι το αποτέλεσμα κώδικα που προσπαθεί να δημιουργήσει ένα αντικείμενο com. για παράδειγμα, εδώ είναι ένα κομμάτι κώδικα εκκίνησης excel:</p><pre><code>excel.applicationclass xlapp = new excel.applicationclass(); </code></pre><p>συνήθως, στο .net 4 απλά πρέπει να αφαιρέσετε το επίθημα 'class' και να συντάξετε τον κώδικα:</p><pre><code>excel.application xlapp = new excel.application(); </code></pre><p>μια εξήγηση του msdn είναι <a href="http://blogs.msdn.com/b/mshneer/archive/2009/12/07/interop-type-xxx-cannot-be-embedded-use-the-applicable-interface-instead.aspx">εδώ</a> .</p>
<p>όπως και ο jan μου πήρε λίγο χρόνο για να το πάρει .. = s έτσι για οποιονδήποτε άλλον που τυφλώθηκε με απογοήτευση.</p><ul> <li>κάντε δεξί κλικ στο παράνομο συνέδριο που προσθέσατε στον explorer explorer στο έργο σας <strong>αναφορές</strong>. (στην περίπτωση μου wia)</li> <li>κάντε κλικ στις ιδιότητες.</li> <li>και θα πρέπει να υπάρχει η επιλογή εκεί για <strong>ενσωμάτωση της συναρμολόγησης interop.</strong></li> <li>ρυθμίστε το σε ψεύτικο</li> </ul>
<p>επέκταση στη σωστή απάντηση του jon.</p><p>το πρόβλημα εδώ είναι ότι συνδυάζετε τη νέα λειτουργία "ενσωμάτωση εντύπων interop" (ή nopia) με χρήση ενός τύπου κλάσης. η λειτουργία "embed interop types" λειτουργεί ουσιαστικώς συνδέοντας στατικά σε όλους τους τύπους από μια pia (primary interop assembly) στη συγκρότηση αναφοράς που αφαιρεί τα γενικά έξοδα της ανάπτυξης της.</p><p>αυτό το χαρακτηριστικό λειτουργεί καλά για τους περισσότερους τύπους σε ένα pia αλλά έχει περιορισμούς. ένα από αυτά είναι ότι δεν μπορείτε να ενσωματώσετε μαθήματα (πρόκειται για ζήτημα εξυπηρέτησης). ο misha έχει ένα λεπτομερές άρθρο σχετικά με το γιατί αυτό δεν επιτρέπεται</p><ul> <li> <a href="http://blogs.msdn.com/mshneer/archive/2009/12/07/interop-type-xxx-cannot-be-embedded-use-the-applicable-interface-instead.aspx">http://blogs.msdn.com/mshneer/archive/2009/12/07/interop-type-xxx-cannot-be-embedded-use-the-applicable-interface-instead.aspx</a> </li> </ul>
<p>εδώ μπορείτε να ορίσετε το embed interop στο visual studio 2012</p><p> <a href="https://i.stack.imgur.com/hhzpd.png"><img src="https://i.stack.imgur.com/hhzpd.png" alt="enter image description here"></a> </p>
<p>πήρε τη λύση</p><p>πηγαίνετε στις αναφορές κάντε δεξί κλικ στο επιθυμητό dll θα λάβετε την επιλογή "embed interop types" σε "false" ή "true".</p>
<p>έτρεξα σε αυτό το ζήτημα όταν τραβήξαμε ένα έργο tfs στην τοπική μηχανή μου. προφανώς, δούλευε καλά στη μηχανή του ατόμου που το έγραψε. απλώς άλλαξα αυτό ...</p><pre><code>wshshellclass shellclass = new wshshellclass(); </code></pre><p>σε αυτό...</p><pre><code>wshshell shellclass = new wshshell(); </code></pre><p>τώρα, δουλεύει σαν πρωταθλητής!</p>
<p>είχα το ίδιο πρόβλημα στο vb.net 2013 με το office 2007 και αυτό το λυθεί:</p><p>vs 2013 πρόγραμμα vb.net&gt; props&gt; refs&gt; microsoft word 12.0 object lib&gt; ενσωμάτωση τύπων interop: αλλαγή true σε false</p>
<p> <a href="http://digital.ni.com/public.nsf/allkb/4ea929b78b5718238625789d0071f307">http://digital.ni.com/public.nsf/allkb/4ea929b78b5718238625789d0071f307</a> </p><p>αυτό το σφάλμα παρουσιάζεται επειδή η προεπιλεγμένη τιμή είναι αληθής για την ιδιότητα embed interop types της συλλογής interop της teststand που αναφέρεται στο νέο έργο. για να επιλύσετε αυτό το σφάλμα, αλλάξτε την τιμή της ιδιότητας embed interop types σε false ακολουθώντας τα εξής βήματα: επιλέξτε την αναφορά της συναρμολόγησης teststand interop στην ενότητα αναφορών του έργου σας στον explorer solution. εντοπίστε την ιδιότητα "ενσωμάτωση ενοποιημένων τύπων" στο πρόγραμμα περιήγησης ιδιοτήτων και αλλάξτε την τιμή σε "false"</p>