Ketika saya menambahkan file .dll sebagai referensi di aplikasi C # itu menunjukkan kesalahan:
Referensi ke ".... dll" tidak dapat ditambahkan. Harap pastikan bahwa file dapat diakses dan merupakan komponen perakitan atau COM yang valid.
ILDissassembler mengatakan tidak ada header CLR yang valid jadi saya mencoba mendaftarkannya menggunakan regsvr32 dan itu memberi saya kesalahan lain:
Modul "" telah dimuat tetapi panggilan ke DLLRegisterServer gagal dengan kode kesalahan '0x80004005'
Saya menggunakan versi ultimate VS2010 pada mesin 64bit Windows 7. Apa masalahnya?
Terima kasih atas petunjuk / balasannya
TlbImp : error TI0000 : The input file 'c:\Program Files\Microsoft SDKs\Windows\ v7.0A\bin\MyLibrary.dll' is not a valid type library.
Ada Saran?Anda dapat menambahkan DLL (atau EXE) ke proyek hanya jika itu adalah rakitan .NET. Jika tidak, Anda akan melihat pesan kesalahan ini.
regsvr32 juga membuat asumsi tertentu tentang struktur dan fungsi yang diekspor di DLL. Sudah lama sejak saya menggunakannya tetapi ini berkaitan dengan mendaftarkan server COM sehingga titik masuk tertentu harus tersedia. Jika regsvr32 gagal DLL tidak menyediakan titik masuk tersebut dan DLL tidak berisi komponen COM.
Anda hanya memiliki kesempatan untuk menggunakan DLL untuk mengimpornya seperti biner non-.NET lainnya, misalnya ketika Anda menggunakan Win32 API tertentu. Ada Artikel Majalah MSDN lama yang mungkin bisa membantu. Lihat pembaruan berikut untuk info di mana mendapatkan artikel.
Pembaruan 12 Maret 2018: Tautan ke Majalah MSDN tidak lagi berfungsi seperti dulu pada Agustus 2010. Artikel oleh Jason Clark berjudul "Kolom .NET: Memanggil Win32 DLL di C # dengan P / Invoke". Itu diterbitkan dalam Majalah MSDN edisi Juli 2010. "Mesin Wayback" memiliki artikel di sini saat ini (pemformatan terbatas). Seluruh majalah MSDN edisi Juli 2010 tersedia di sini (hanya format HCM, petunjuk tentang cara menggunakan file HCM di sini ).
sumber
Saya menggunakan dependency walker untuk memeriksa referensi internal yang dimiliki dll. Ternyata itu membutuhkan runtime VB msvbvm60.dll dan karena kotak dev saya tidak menginstalnya, saya tidak dapat mendaftarkannya menggunakan regsvr32
Sepertinya itulah jawaban dari pertanyaan awal saya untuk saat ini.
sumber
Pastikan kompiler Anda disetel ke x86 jika Anda mencoba mereferensikan x86 dll ...
Saya mengalami masalah serupa ... seperti yang disebutkan di atas, mencoba menggunakan OLEDB untuk mengakses file Excel dari kode C # saya di Visual Studio 2012.
Saya terus mendapatkan kesalahan tentang pustaka Access yang tidak dapat diakses tetapi saya tahu bahwa saya telah memuatnya.
Selama Debug, saya sadar bahwa saya sedang mengompilasi untuk 64 bit tetapi Office x86 dimuat. Meskipun saya memuat pustaka Access untuk 32 bit, itu tidak pernah digunakan oleh aplikasi ... dan, oleh karena itu, tidak dapat diakses.
Inilah yang saya gunakan di C #:
"Penyedia = Microsoft.ACE.OLEDB.12.0; Sumber Data =" + strFilePath + "; Properti Diperluas = 'Excel 12.0 Xml; HDR = Ya'";
... Saya mendapatkan kesalahan
Segera setelah saya mengganti kompiler ke x86 itu berhasil
sumber
Saya baru saja mengalami masalah itu dan setelah semua penjelasan tentang memperbaikinya dengan command prompt, saya menemukan bahwa jika Anda menambahkannya langsung ke proyek, Anda dapat dengan mudah menyertakan pustaka pada setiap halaman yang diperlukan
sumber
Saya memiliki masalah yang sama dengan mengimpor WinSCard.dll dalam proyek saya. Saya menangani itu mengimpor langsung dari dll seperti ini:
Anda dapat menambahkan ini ke proyek terpisah dan kemudian menambahkan referensi dari proyek utama Anda.
sumber
Saya mengalami masalah ini setelah PC saya dihidupkan ulang selama membangun solusi. Dua referensi saya hilang, jadi saya harus membangun kembali dua proyek saya secara manual dan kemudian saya dapat menambahkan referensi tanpa kesalahan.
sumber
Anda tidak dapat menambahkan referensi ke DLL asli . Namun Anda dapat memasukkannya ke dalam solusi (solusi klik kanan, pilih "Tambahkan file yang ada"), tetapi mereka tidak akan direferensikan kecuali Anda menyatakan sesuatu seperti
Mungkin ada sejenis pembungkus DLL, yang sebenarnya Anda rujuk dan yang berisi impor DLL.
Kadang-kadang, Anda dapat mereferensikan DLL pembungkus tetapi masih tidak dapat membuat program Anda berjalan, di mana prompt kesalahan menyarankan Anda untuk memastikan file tersebut ada dan semua dependensi tersedia.
Masalah ini karena perakitan yang Anda coba tambahkan ditargetkan dan dikompilasi hanya untuk x86 atau x64 arsitektur prosesor .
Coba saja ubah Target Platform ke x86 atau x64 di Build -> Configuration Manager .
sumber
Saya perlu mengubah arsitektur ke x86 dari x64 di manajer konfigurasi dan menyalin dll 32 bit saya (bahasa C - pcProxAPI.dll) ke dalam folder baru yang dibuat ini .. Ini di atas langkah-langkah yang dijelaskan oleh "Sashus" di bawah ini .
C: \ Proyek .. \ bin \ x86 \ Debug
sumber
Saya memiliki masalah yang sama ketika saya mencoba menambahkan dll yang baru saja saya kodekan dalam C ++ ke proyek C # saya yang baru. Ternyata saya perlu mengatur properti proyek C ++ dll saya dari:
Configuration Properties\General\Common Language Runtime Support: /clr
Configuration Properties\C/C++\General\Common Language RunTime Support: /clr
Karena proyek C # di mana saya ingin menggunakan dll ini juga diatur seperti itu (memiliki properti yang sama
/clr
).sumber
Saya menghadapi masalah yang sama. Saya mencoba menambahkan referensi dari .net 2.0 dll ke proyek .Net 1.1. Ketika saya mencoba menambahkan versi .dll sebelumnya yang sesuai dengan .Net 1.1. itu berhasil untuk saya.
sumber
Untuk orang lain yang mencari bantuan tentang masalah ini, atau mengalami FileNotFoundException atau FirstChanceException, lihat jawaban saya di sini:
Pengecualian kesempatan pertama dari jenis 'System.IO.FileNotFoundException' terjadi di mscorlib.ni.dll - windows phone
Secara umum Anda harus benar-benar yakin bahwa Anda memenuhi semua persyaratan untuk membuat referensi - Saya tahu itu jawaban yang jelas, tetapi Anda mungkin mengabaikan persyaratan yang relatif sederhana.
sumber
Saya mengalami kesalahan ini saat menulis Layanan Windows. Saya menjalankan Visual Studio sebagai Administrator sehingga perintah pembuatan posting saya akan secara otomatis menginstal layanan saya. Saya perhatikan bahwa ketika saya menutup semuanya dan menjalankan VS secara normal (Bukan sebagai Administrator) itu memungkinkan saya menambahkan referensi dengan baik tanpa kesalahan.
Semoga solusi ini berhasil untuk Anda.
sumber
Biasanya di Visual Studio 2015 Anda harus membuat proyek dll sebagai C ++ -> proyek CLR dari template Visual Studio, tetapi Anda secara teknis dapat mengaktifkannya setelah fakta:
Properti kritis disebut
Common Language Runtime Support
set dalam konfigurasi proyek Anda. Itu ditemukan di bawahConfiguration Properties > General > Common Language Runtime Support
.Saat melakukan ini, VS mungkin tidak akan memperbarui opsi 'Target .NET Framework' (seperti seharusnya). Anda dapat menambahkan ini secara manual dengan membongkar proyek Anda, mengedit file your_project.xxproj, dan menambahkan / memperbarui
Target .NET framework Version
tag XML.Sebagai contoh, saya sarankan untuk membuat solusi baru sebagai proyek C ++ CLR dan memeriksa XML di sana, bahkan mungkin membedakannya untuk memastikan tidak ada yang sangat penting yang tidak biasa.
sumber
Jawaban saya agak terlambat, tetapi sebagai tes cepat, pastikan Anda menggunakan perpustakaan versi terbaru.
Dalam kasus saya setelah memperbarui pustaka nuget yang mereferensikan pustaka lain yang menyebabkan masalah, masalahnya hilang.
sumber
Anda dapat menambahkan file .dll secara manual. Misalnya jika Anda ingin menambahkan file dll di aplikasi WPF Anda, dan Anda tidak dapat merujuknya di proyek Anda
(Mendapatkan kesalahan: Referensi ke ".... dll" tidak dapat ditambahkan. Harap pastikan bahwa file dapat diakses dan merupakan komponen perakitan atau COM yang valid),
lalu COPY file dll itu dan PASTE di INSTALLER PROJECT (di folder aplikasi).
sumber
sumber