I'm memanggil fungsi dari 32-bit DLL tidak dikelola pada sistem 64-bit. Apa yang saya dapatkan adalah:
BadImageFormatException: upaya Yang dilakukan untuk memuat program dengan format yang benar. (Pengecualian dari HRESULT: 0x8007000B)
Pada awalnya, saya punya proyek yang ditetapkan untuk Setiap CPU platform, jadi saya mengubah mereka berdua untuk x86, tetapi kesalahan ini masih terjadi. Yang's benar-benar hanya memperbaiki yang saya tahu selama ini.
Dll aren't korup atau apa, karena saya dapat menggunakannya dengan program lain (yang saya don't memiliki sumber). Saya berpikir bahwa mungkin itu bukan't menemukan ketergantungan, tapi saya diperiksa dan mereka're semua ada. Plus, tidak't itu melempar DllNotFoundException
dalam kasus itu?
Apa lagi yang bisa saya lakukan? Dan sebelum anda mengatakan "Menggunakan 64-bit DLL tidak dikelola sebaliknya," biarkan saya menunjukkan bahwa ada isn't satu. ;)
Jika anda mencoba untuk menjalankan aplikasi 32-bit pada IIS 7 (dan/atau 64-bit OS), anda akan mendapatkan kesalahan yang sama. Jadi, dari IIS 7, klik kanan pada aplikasi' aplikasi outdoor dan pergi ke "pengaturan lanjutan" dan perubahan, "Aktifkan Aplikasi 32-Bit" "BENAR".
Restart website anda dan harus bekerja.
Entah bagaimana, Membangun centang di Manajer Konfigurasi telah dicentang untuk eksekusi saya, jadi itu masih berjalan dengan CPU membangun. Setelah saya tetap itu, Visual Studio mengeluh bahwa itu tidak't debug majelis, tapi itu tetap dengan me-restart.
Di Visual, Klik Kanan anda proyek -> Pada panel sebelah kiri klik Membangun tab,
di bawah Platform Target pilih x86 (atau lebih umumnya arsitektur untuk mencocokkan dengan perpustakaan anda terhubung ke)
Saya harap ini membantu seseorang! :)
Aku punya masalah ini juga. Mencoba semua saran di sini, tapi mereka didn't membantu.
Saya menemukan hal lain untuk memeriksa bahwa tetap untuk saya. Di Visual Studio, klik kanan pada project dan buka "Sifat". Klik pada "Menyusun" (atau "Membangun") tab dan kemudian klik pada "Maju Mengkompilasi Pilihan" di bagian bawah.
Periksa dropdown "Target CPU". Ini harus sesuai dengan "Platform" anda sedang membangun. Artinya, jika anda sedang membangun "Setiap CPU" maka "Target CPU" harus mengatakan "Setiap CPU". Pergi melalui semua Platform dengan membuat mereka aktif dan memeriksa pengaturan ini.
Jika anda menemukan kesalahan ini ketika anda klik tombol panah hijau untuk menjalankan aplikasi, tapi tetap ingin menjalankan aplikasi 64 bit. Anda dapat melakukan ini LEBIH baik dari tahun 2013, 2015, dan tahun 2017
Pergi ke: Tools > Pilihan > proyek-Proyek dan Solusi > Proyek Web > Menggunakan versi 64 bit IIS Express
Jika anda menggunakan Any CPU, anda mungkin mengalami masalah ini jika Prefer 32-bit opsi dicentang:
Pastikan anda hapus pilihan ini dalam proyek's property's Membangun tab!
Sedikit off topic untuk posting ini, tapi mencari pesan kesalahan ini membawa saya ke sini.
Jika anda sedang membangun melalui sistem tim dan mendapatkan error ini, membangun definisi proses tab memiliki "MSBuild Platform" pengaturan. Jika ini diatur ke "Auto", anda mungkin mengalami masalah ini. Perubahan itu untuk "X86" dapat juga mengatasi kesalahan.
Lihat juga jawaban ini, yang memecahkan masalah yang sama bagi saya.
Posted by Luis Mack pada 5/12/2010 pada 8:50 AM I've ditemukan masalah yang sama, hanya untuk proyek tertentu ketika menyusun pada mesin 64-bit. Perbaikan yang TAMPAKNYA bekerja adalah untuk secara manual mengubah satu karakter dalam gambar stream SETIAP KALI usercontrol atau bentuk diedit di desainer
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luzg93cy5gb3jtcywgvmvyc2lvbj00ljaumc4w
Perubahan
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luzg93cy5gb3jtcywgvmvyc2lvbj0yljaumc4w
Itu adalah 00LjAuMC4w kembali ke 0yLjAuMC4w pada akhir baris (00 kembali ke 0)
Dalam kasus saya, saya menggunakan kecil .exe yang memuat dirujuk Dll melalui Refleksi. Jadi saya hanya melakukan langkah-langkah yang menyimpan hari saya:
Dari proyek properti di solusi explorer, pada tab membangun, saya memilih target platfrom x86
Dalam kasus saya, saya menjalankan tes melalui MSTest dan menemukan bahwa saya menggunakan kedua 32-bit dan 64-bit DLL untuk menguji direktori. Program ini mendukung 64-bit DLL dan menyebabkan ia gagal.
TL;DR pastikan anda hanya menggunakan 32-bit Dll untuk tes.
Bangunan pada jawaban dari @paibamboo
Dia berkata: Pergi ke: Tools > Pilihan > proyek-Proyek dan Solusi > Proyek Web > Menggunakan versi 64 bit IIS Express
Rekan kerja saya memiliki kotak ini dicentang (dia tampak secara eksplisit untuk itu), tetapi memiliki pesan kesalahan dalam pertanyaan. Setelah beberapa jam dia dicentang kotak dan diperiksa lagi. Lo dan lihatlah: kode sekarang berlari dengan sukses.
Tampaknya, bahwa ada dua tempat di mana keadaan ini kotak ist disimpan yang menjadi sinkron. Un - dan mengecek kembali itu disinkronkan lagi.
Pertanyaan untuk lebih knowledgable pengguna: apakah ada pembaruan atau sesuatu pekan lalu (untuk VS 2015) yang secara de-disinkronkan amerika?
Aku punya masalah ini diselesaikan dalam 'Windows' cara. Setelah memeriksa semua pengaturan saya, membersihkan solusi dan membangun kembali, aku hanya menutup solusi dan membukanya kembali. Kemudian bekerja, sehingga LEBIH mungkin didn't menyingkirkan beberapa barang selama pembersihan. Ketika solusi logis don't bekerja, biasanya saya beralih ke yang tidak logis (atau tampaknya tidak logis) yang. Windows doesn't let me down. :)
Saya bisa memperbaiki masalah ini dengan pencocokan saya membangun versi ke versi .NET versi pada server.
Saya dua kali diklik .exe hanya untuk melihat apa yang akan terjadi dan mengatakan kepada saya untuk menginstal 4.5....
Jadi saya diturunkan ke 4.0 dan itu bekerja!
Jadi pastikan anda versi pertandingan. Berlari pada dev saya baik-baik saja kotak, tapi server telah tua .NET versi.
Kami memiliki masalah yang sama .NET inti. Solusinya adalah untuk men-download 32-bit .netcore runtime, dan memiliki target proyek 86
Di csproj
tambahkan file
``
Ini digunakan untuk mesin Windows, anda'a harus menyesuaikan jalan dan seperti untuk Linux/OSX