Saya membuat aplikasi web pada .NET 4.0 framework (beta2) di C #.
Ketika saya mencoba menggunakan perakitan yang disebut "ActiveHomeScriptLib", saya mendapatkan kesalahan berikut:
Tipe Interop 'ActiveHomeScriptLib.ActiveHomeClass' tidak dapat disematkan. Gunakan antarmuka yang berlaku sebagai gantinya.
Ketika saya mengubah kerangka kerja ke versi 3.5, saya tidak memiliki kesalahan.
Apa itu Jenis Interop dan mengapa ini hanya terjadi ketika saya menggunakan kerangka kerja 4.0?
Jawaban:
.NET 4.0 memungkinkan rakitan interop primer (atau lebih tepatnya, bit-bit yang Anda butuhkan) untuk dimasukkan ke dalam rakitan Anda sehingga Anda tidak perlu menempatkannya di samping aplikasi Anda.
Untuk alasan apa pun, perakitan ini tidak dapat disematkan - tetapi sepertinya itu bukan masalah bagi Anda. Cukup buka tab Properties untuk perakitan di Visual Studio 2010 dan atur "Embed Interop Types" ke "False".
EDIT: Lihat juga jawaban Michael Gustus , menghapus
Class
akhiran dari tipe yang Anda gunakan.sumber
embed interop types
properti yang disebutkan di atas untukfalse
melakukan trik. Dalam kasus saya - saya bekerja denganMicrosoft.Office.Interop.Excel
perpustakaan dan perlu mengakses objek Buku Kerja. Menggunakan antarmuka ituWorkbook
(konvensi penamaan btw ...) bukan pilihan - saya terimaCOM object
, bukan yang diinginkanMicrosoft.Office.Interop.Excel.WorkbookClass
Dalam kebanyakan kasus, kesalahan ini adalah hasil dari kode yang mencoba untuk instantiate objek COM. Sebagai contoh, ini adalah bagian dari kode yang memulai Excel:
Biasanya, dalam .NET 4 Anda hanya perlu menghapus akhiran 'Kelas' dan kompilasi kode:
Penjelasan MSDN ada di sini .
sumber
Seperti Jan Butuh waktu beberapa saat untuk mendapatkannya .. = S Jadi bagi siapa pun yang buta dengan frustrasi.
sumber
Di sinilah tempat untuk mengatur Embed Interop di Visual Studio 2012
sumber
Memperluas jawaban yang benar dari Jon.
Masalahnya di sini adalah bahwa Anda menggabungkan fitur "Embed Interop Types" (atau NoPIA) baru dengan penggunaan tipe kelas. Fitur "Tipe Embed Interop" bekerja dengan menghubungkan secara esensial secara statis semua jenis dari PIA (Majelis Interop Primer) ke dalam unit referensi yang menghilangkan overhead penerapannya.
Fitur ini berfungsi dengan baik untuk sebagian besar tipe dalam PIA tetapi memiliki batasan. Salah satunya adalah Anda tidak dapat menyematkan kelas (ini adalah masalah servis). Misha memiliki artikel blog terperinci tentang mengapa ini tidak diperbolehkan
sumber
Dapatkan solusinya
Pergi ke referensi klik kanan dll yang diinginkan Anda akan mendapatkan opsi "Embed Interop Types" ke "False" atau "True".
sumber
Saya mengalami masalah ini ketika menarik proyek TFS ke mesin lokal saya. Diduga, itu bekerja dengan baik pada mesin pria yang menulisnya. Saya hanya mengubah ini ...
Untuk ini...
Sekarang, itu bekerja seperti juara!
sumber
Saya memiliki masalah yang sama di VB.NET 2013 dengan Office 2007, dan ini menyelesaikannya:
VS 2013 VB.NET Project> Props> Refs> Microsoft Word 12.0 Object Lib> Jenis Embed Interop: ubah Benar ke Salah
sumber
http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307
Kesalahan ini terjadi karena nilai default adalah benar untuk properti Jenis Interop Embed dari rakitan Interop TestStand API yang dirujuk dalam proyek baru. Untuk mengatasi kesalahan ini, ubah nilai properti Tipe Tanam Tertanam menjadi Salah dengan mengikuti langkah-langkah ini: Pilih referensi Majelis Interop TestStand di bagian referensi proyek Anda di Solution Explorer. Temukan properti Tipe Tanamkan Interop di Browser Properti, dan ubah nilainya menjadi Salah
sumber
Visual Studio 2017 versi 15.8 memungkinkan untuk menggunakan PackageReferenceyntax untuk referensi paket NuGet dalam proyek Visual Studio Extensibility (VSIX). Ini membuatnya lebih mudah untuk mempertimbangkan tentang paket NuGet dan membuka pintu untuk memiliki paket meta lengkap yang berisi seluruh VSSDK.
Menginstal di bawah paket NuGet akan menyelesaikan Masalah EmbedInteropTypes .
sumber