Próbuję uruchomić moją aplikację .NET 3.5 WinForms na Win7 x64. Aplikacja korzysta z NHibernate i System.Data.OracleClient, aby uzyskać dostęp do bazy danych Oracle. Klient Oracle jest 32-bitowy.Jak wymusić uruchomienie aplikacji .NET w trybie 32-bitowym
Podczas uruchamiania aplikacji otrzymuję następujący komunikat o błędzie
próba załadowania biblioteki Oracle Client rzucił BadImageFormatException. Ten problem występuje podczas pracy w trybie 64-bitowym z zainstalowanymi 32-bitowymi komponentami klienta Oracle.
W odpowiedzi na to, że kierowane mój build na platformie x86:
Ku mojemu zaskoczeniu, ten sam komunikat o błędzie pojawił podczas próby wykonania tej nowej opierać się na Platforma Win7.
Zespół NHibernate jest ładowany w czasie wykonywania przez Assembly.Load("...");
.
Czy to możliwe, że biblioteka DLL NHibernate nadal działa w trybie 64-bitowym, podczas gdy host hosta działa w trybie 32-bitowym. Brzmi to dla mnie dziwnie. A może z jakiegoś powodu moja aplikacja działa w trybie 64-bitowym, mimo że była kierowana na x86?
Aktualizacja:
Sprawdziłem moje binarnych za pomocą CorFlags i jest oznaczona 32 bitowe:
Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 3
ILONLY : 1
32BIT : 1
Signed : 0
ja również sprawdzić go w Menedżerze zadań, i ma *32
przyrostek .
Próbowałem również i wykorzystywane CorFlags aby dodać flagę 32bit do wszystkich zespołów, które pochodzą z mojej aplikacji. Nadal pojawia się ten sam komunikat o błędzie.
jestem zaskoczony ... zdziwiony ... zdziwiony ...
Czy sprawdziłeś za pomocą menedżera zadań, czy program działa w trybie 32-bitowym lub 64-bitowym, gdy się zawiesza? Jeśli ma on "* 32" za swoją nazwą procesu, to jest 32-bitowy, w przeciwnym razie 64-bitowy (przy założeniu 64-bitowego systemu operacyjnego i systemu operacyjnego). –
I na co celowałeś w x86? Twoja biblioteka zajęć? Twój program? Obie? –
@Lasse: Bardziej szczegółowo aplikacja składa się z 3 warstw, 2 bibliotek DLL i 1 EXE, podczas gdy jedna biblioteka DLL odwołuje się do NHibernate. Skierowałem je wszystkie na x86 i upewniłem się, że podczas kompilacji projekt EXE wykorzystuje binaria x86 projektów DLL. Jedyne, czego nie mogę kontrolować, to sama biblioteka NHibernate. – chiccodoro