Saya membuat sebuah aplikasi web pada .NET framework 4.0 (beta2) di C#.
Ketika saya mencoba untuk menggunakan sebuah majelis yang disebut "ActiveHomeScriptLib", saya mendapatkan error berikut:
Interop jenis 'ActiveHomeScriptLib.ActiveHomeClass' tidak dapat tertanam. Penggunaan yang berlaku antarmuka sebaliknya.
Ketika saya mengubah framework versi 3.5, I don't memiliki kesalahan.
Apa Interop Jenis dan mengapa hal ini hanya terjadi ketika saya menggunakan framework 4.0?
.NET 4.0 memungkinkan utama interop majelis (atau lebih tepatnya, potongan-potongan yang anda butuhkan) untuk dimasukkan ke dalam majelis sehingga anda don't perlu untuk menempatkan mereka bersama dengan aplikasi anda.
Untuk alasan apapun, majelis ini dapat't akan tertanam - tapi kedengarannya seperti itu's tidak masalah bagi anda. Hanya membuka tab Properti untuk perakitan di Visual Studio 2010 dan menetapkan "Cantumkan Interop Jenis" untuk "Salah".
EDIT: Lihat juga Michael Gustus's jawaban, menghapus Kelas
akhiran dari jenis anda're menggunakan.
Dalam kebanyakan kasus, kesalahan ini adalah hasil dari kode yang mencoba untuk instantiate obyek COM. Sebagai contoh, berikut adalah potongan kode memulai Excel:
Excel.ApplicationClass xlapp = new Excel.ApplicationClass();
Biasanya, dalam .NET 4 anda hanya perlu untuk menghapus 'Kelas' akhiran dan mengkompilasi kode:
Excel.Application xlapp = new Excel.Application();
MSDN penjelasan di sini.
Seperti Jan butuh waktu untuk mendapatkannya .. =S Jadi bagi siapa pun yang's dibutakan dengan frustrasi.
Memperluas pada Jon's jawaban yang benar.
Masalahnya di sini adalah bahwa anda adalah menggabungkan baru "Cantumkan Interop Jenis" (atau NoPIA) fitur dengan menggunakan tipe kelas. &Quot;Cantumkan Interop Jenis" menampilkan karya-karya pada dasarnya statis menghubungkan di semua jenis dari PIA (Primer Interop Assembly) ke dalam referensi majelis menghilangkan overhead penggelaran itu.
Fitur ini bekerja baik untuk sebagian besar jenis dalam PIA tetapi tidak memiliki batasan. Salah satu dari mereka adalah bahwa anda tidak cantumkan kelas (it's yang melayani masalah). Misha memiliki rinci blog artikel tentang mengapa hal ini tidak diperbolehkan
Aku berlari ke dalam masalah ini ketika menarik ke bawah TFS proyek untuk mesin lokal. Diduga, itu bekerja dengan baik pada pria's mesin yang menulis itu. Aku hanya berubah ini...
WshShellClass shellClass = new WshShellClass();
Untuk ini...
WshShell shellClass = new WshShell();
Sekarang, itu adalah bekerja seperti champ!
http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307
Kesalahan ini terjadi karena nilai default adalah true untuk Cantumkan Interop Jenis properti TestStand API Interop majelis direferensikan dalam proyek baru. Untuk mengatasi kesalahan ini, perubahan nilai Cantumkan Interop Jenis properti untuk Palsu dengan mengikuti langkah berikut: Pilih TestStand Interop Majelis referensi dalam referensi bagian dari proyek anda dalam Solusi Explorer. Menemukan Cantumkan Interop Jenis properti di properti Browser, dan mengubah nilai False
Visual Studio 2017 versi 15.8 membuatnya mungkin untuk menggunakan PackageReferencesyntax untuk referensi paket NuGet dalam Visual Studio Diperpanjang (VSIX) proyek. Hal ini membuat jauh lebih mudah untuk alasan tentang paket NuGet dan membuka pintu untuk memiliki lengkap meta paket yang berisi seluruh VSSDK.
Menginstal di bawah ini paket NuGet akan memecahkan EmbedInteropTypes Masalah.
Install-Paket Microsoft.VisualStudio.SDK.EmbedInteropTypes