Kličem funkcije iz 32-bitne DLL brez upravljanja v 64-bitnem sistemu. To, kar dobim, je:
BadImageFormatException: V tem primeru je bil izveden poskus nalaganja programa z nepravilnim formatom. (Izjema iz HRESULT: 0x8007000B)
Sprva sem imel projekte nastavljene na platformo Any CPU, zato sem oba spremenil na x86, vendar se ta napaka še vedno pojavlja. To je res edini popravek, ki ga poznam za to.
DLL-ji niso poškodovani ali kaj podobnega, saj jih lahko uporabljam z drugimi programi (za katere nimam izvorne kode). Mislil sem, da morda ne najde odvisnosti, vendar sem preveril in vse so tam. Poleg tega, ali ne bi v tem primeru vrgel DllNotFoundException
?
Kaj lahko še storim? In preden rečete "Uporabite 64-bitno DLL brez upravljanja," naj poudarim, da je ni. ;)
Če poskušate zagnati 32-bitne aplikacije v sistemu IIS 7 (in/ali 64-bitnem operacijskem sistemu), se bo pojavila enaka napaka. Zato v sistemu IIS 7 z desnim gumbom miške kliknite na bazen aplikacij in pojdite na možnost "advanced settings" ter spremenite "Enable 32-Bit Applications" v "TRUE".
Ponovno zaženite spletno stran in delovati bi moralo.
Nekako je bilo potrditveno polje Build v upravitelju konfiguracije za moj izvedbeni program odkljukano, zato je še vedno deloval s staro sestavo Any CPU. Ko sem to popravil, se je Visual Studio pritožil, da ne more razhroščevati sestava, vendar je bilo to odpravljeno s ponovnim zagonom.
Pravkar sem imel tudi to težavo. Poskusil sem vse predloge tukaj, vendar niso pomagali.
Našel sem še eno stvar, ki jo je treba preveriti in mi je pomagala. V programu Visual Studio desno kliknite na projekt in odprite "Properties". Kliknite na zavihek "Compile" (ali "Build") in nato kliknite na "Advanced Compile Options" na dnu.
Označite spustno okno "Target CPU". Ujemati se mora s platformo, ki jo gradite. To pomeni, če gradite "Any CPU", potem mora biti v "Target CPU" navedeno "Any CPU". Pojdite skozi vse svoje platforme, tako da jih naredite aktivne, in preverite to nastavitev.