Saya memanggil fungsi dari DLL 32-bit yang tidak dikelola pada sistem 64-bit. Apa yang saya dapatkan adalah:
BadImageFormatException: Upaya telah dilakukan untuk memuat program dengan format yang salah. (Pengecualian dari HRESULT: 0x8007000B)
Pada awalnya, saya mengatur proyek saya ke platform Any CPU, jadi saya mengubah keduanya menjadi x86, tetapi kesalahan ini masih terjadi. Itu benar-benar satu-satunya perbaikan yang saya tahu untuk ini.
DLL tidak rusak atau apa pun, karena saya dapat menggunakannya dengan program lain (yang saya tidak punya sumbernya). Saya pikir mungkin itu tidak menemukan ketergantungan, tetapi saya memeriksa dan mereka semua ada di sana. Plus, bukankah itu melempar DllNotFoundException
dalam kasus itu?
Apa lagi yang bisa saya lakukan? Dan sebelum Anda mengatakan "Gunakan DLL 64-bit yang tidak dikelola sebagai gantinya," izinkan saya menunjukkan bahwa tidak ada satu pun. ;)
Jawaban:
Jika Anda mencoba menjalankan aplikasi 32-bit pada IIS 7 (dan / atau mesin OS 64-bit), Anda akan mendapatkan kesalahan yang sama. Jadi, dari IIS 7, klik kanan pada kumpulan aplikasi aplikasi dan pergi ke "pengaturan lanjutan" dan ubah "Aktifkan Aplikasi 32-Bit" menjadi "BENAR".
Mulai ulang situs web Anda dan itu akan berfungsi.
sumber
Entah bagaimana, kotak centang Bangun di Pengelola Konfigurasi telah dicentang untuk dieksekusi saya, jadi itu masih berjalan dengan membangun Apa saja CPU lama. Setelah saya memperbaikinya, Visual Studio mengeluh bahwa itu tidak bisa men-debug perakitan, tapi itu diperbaiki dengan restart.
sumber
Di Visual Studio , Klik kanan proyek Anda -> Pada panel kiri klik tab Bangun ,
di bawah Target Platform, pilih x86 (atau lebih umum arsitektur yang cocok dengan perpustakaan yang Anda tautkan)
Saya harap ini membantu seseorang! :)
sumber
Saya hanya punya masalah ini juga. Sudah mencoba semua saran di sini, tetapi itu tidak membantu.
Saya menemukan hal lain untuk memeriksa yang memperbaikinya untuk saya. Di Visual Studio, klik kanan pada proyek dan buka "Properties". Klik pada tab "Kompilasi" (atau "Bangun") dan kemudian klik "Opsi Kompilasi Lanjutan" di bagian bawah.
Periksa dropdown "Target CPU". Itu harus cocok dengan "Platform" yang Anda bangun. Yaitu, jika Anda membangun "Any CPU" maka "Target CPU" harus mengatakan "Any CPU". Telusuri semua Platform Anda dengan membuatnya aktif dan periksa pengaturan ini.
sumber
Jika Anda menemukan kesalahan ini ketika Anda mengklik tombol panah hijau untuk menjalankan aplikasi, tetapi masih ingin menjalankan aplikasi dalam 64 bit. Anda dapat melakukan ini di VS 2013, 2015, 2017, dan 2019
Pergi ke: Alat> Opsi> Proyek dan Solusi> Proyek Web> Gunakan IIS Express versi 64 bit
sumber
Jika Anda menggunakan Any CPU , Anda mungkin mengalami masalah ini jika opsi Prefer 32-bit dicentang:
Pastikan Anda tidak mencentang opsi ini di tab Bangun properti proyek !
sumber
Topik yang agak aneh untuk posting ini, tetapi mencari pesan kesalahan ini membawa saya ke sini.
Jika Anda membangun melalui sistem tim dan mendapatkan kesalahan ini, tab proses definisi pembangunan memiliki pengaturan "Platform MSBuild". Jika ini diatur ke "Otomatis", Anda mungkin mengalami masalah ini. Mengubahnya menjadi "X86" juga dapat mengatasi kesalahan.
sumber
Dalam kasus saya, saya menggunakan DLL asli di C #. DLL ini bergantung pada beberapa DLL lain yang hilang. Setelah DLL lainnya ditambahkan semuanya bekerja.
sumber
Membangun jawaban dari @paibamboo
Dia berkata: Pergi ke: Alat> Opsi> Proyek dan Solusi> Proyek Web> Gunakan versi 64 bit dari IIS Express
Rekan kerja saya memeriksa kotak ini (dia secara eksplisit mencarinya), tetapi ada pesan kesalahan yang dipermasalahkan. Setelah beberapa jam dia menghapus centang kotak dan memeriksanya lagi. Lihat dan lihat: Kode sekarang berjalan dengan sukses.
Tampaknya, ada dua tempat di mana keadaan kotak ini disimpan yang menjadi tidak sinkron. Batalkan dan periksa kembali sinkronisasi.
Pertanyaan untuk pengguna yang lebih berpengetahuan: Apakah ada pembaruan atau sesuatu minggu lalu (untuk VS 2015) yang tidak disinkronkan negara?
sumber
Lihat juga jawaban ini , yang memecahkan masalah yang sama bagi saya.
sumber
Dalam kasus saya, saya menggunakan .exe kecil yang memuat ulang DLL yang direferensikan melalui Refleksi. Jadi saya hanya melakukan langkah-langkah ini yang menyelamatkan hari saya:
Dari properti proyek pada explorer solusi, pada tab build, saya memilih platfrom target x86
sumber
Dalam kasus saya, saya menjalankan tes melalui MSTest dan menemukan bahwa saya menggunakan DLL 32-bit dan 64-bit ke direktori tes. Program ini mendukung DLL 64-bit dan menyebabkannya gagal.
TL; DR Pastikan Anda hanya menggunakan DLL 32-bit untuk pengujian.
sumber
Kami memiliki masalah serupa dan kami berhasil memperbaikinya dengan menetapkan target Platform ke x86.
sumber
Saya mengatasi masalah ini dengan cara 'Windows'. Setelah memeriksa semua pengaturan saya, membersihkan solusi dan membangunnya kembali, saya hanya menutup solusi dan membukanya kembali. Kemudian itu berhasil, jadi VS mungkin tidak menyingkirkan beberapa barang selama pembersihan. Ketika solusi logis tidak berhasil, saya biasanya beralih ke solusi yang tidak logis (atau tampaknya tidak logis). Windows tidak mengecewakan saya. :)
sumber
Saya dapat memperbaiki masalah ini dengan mencocokkan versi build saya dengan versi .NET di server.
Saya mengklik dua kali .exe hanya untuk melihat apa yang akan terjadi dan itu memberitahu saya untuk menginstal 4.5 ....
Jadi saya turun ke 4.0 dan berhasil!
Jadi pastikan versi Anda cocok. Itu berjalan di kotak dev saya baik-baik saja, tetapi server memiliki versi .NET yang lebih tua.
sumber
Dalam kasus saya itu adalah konten file yang salah. DLL diunduh dari web, tetapi konten DLL adalah laman HTML: D Cobalah untuk memeriksa apakah ini file biner, apakah sepertinya DLL yang benar :)
sumber
Kami mengalami masalah yang sama di .NET core. Solusinya adalah mengunduh 32-bit .netcore runtime, dan memiliki target proyek Anda
x86
Di
csproj
file Anda tambahkanIni digunakan untuk mesin Windows, Anda harus menyesuaikan jalur dan semacamnya untuk Linux / OSX
sumber
Jika Anda mengimpor DLL yang tidak dikelola, gunakan
dalam metode impor DLL Anda.
sumber
1: Buka: Peralatan> Opsi> Proyek dan Solusi> Proyek Web> Gunakan versi 64 bit dari IIS Express 2: ubah pengaturan di bawah ini untuk proyek layanan web.
sumber