2017-05-19 1 views
0

Die Geschichte: Meine Website läuft in System.Data.OraceClient (ich kann die DLL aus verschiedenen technischen Gründen nicht ändern). Jetzt habe ich eine Drittanbieter-DLL in meine Website integriert, die 32 Bit ist. Wenn ich von Visual Studio aus laufe, läuft alles einwandfrei, aber wenn ich es in IIS veröffentlich, wird der obige Fehler ausgegeben.Versuch, Oracle-Client-Bibliotheken zu laden, warf BadImageFormatException IIS System.Data.OracleClient

Jetzt Lösungen sind: Aktivieren 32 Bit in IIS-Anwendungspool

Wenn 32bit den Dritten DLL zu arbeiten beginnt, aktiviert und System.Data.Oracle client fails with BadImageFormat exception

Disable 32-Bit in IIS-Applikationspool.

Wenn 32 Bit deaktiviert ist System.Data.OracleClient beginnt zu arbeiten und die Drittanbieter-DLL wird mit dem folgenden Fehler fehlschlagen.

Jetzt bin ich in einer Situation nur eine DLL wird zu einer Zeit arbeiten. Gibt es eine Problemumgehung, um mein System.Data.OracleClient auszuführen, wenn 32Bit in Anwendungspool aktiviert ist, ohne zu versuchen, meine gesamte Anwendung zu Oracle Data Access zu migrieren?

+0

Ich bin nur einen Stich an mich hier machen, aber ... Welche Version des Oracle-Client wird auf dem Web-Server installiert ist (es ist die vollständige Client oder Instant Client)? Und ist es 32 Bit oder 64 Bit? –

+0

Es stammt von .Net Assemblies für 4.5.1. Die Version der DLL ist 4.0 und es ist 64 Bit glaube ich. – smilu

Antwort

0

Ich denke, der einzige Weg, dies zu erreichen, ist Ihre Web-Anwendung als 32-Bit zu bauen und auf diese Weise einen 32-Bit-Client verwenden. Dann ist alles 32 Bit. Stellen Sie sicher, dass Ihre Webanwendung für x86 ist. Erstellen Sie nicht als AnyCpu, da dies standardmäßig der x64 der Zielplattform entspricht.

+0

Ich habe versucht, es auf x86 zu ändern. Trotzdem bekomme ich die gleiche BadImageFormat-Ausnahme – smilu

+0

Nein, AnyCPU bedeutet, dass der Prozess, der die DLL lädt, bestimmt, welchen Modus die DLL verwenden wird. Bei einer Website unter IIS wird dies vollständig über die Einstellung "32-Bit aktivieren" gesteuert. Das Erzwingen der Kompilierung auf 32 Bits hilft in diesem Fall nicht - verwenden Sie die Einstellung. Es klingt wie die Oracle-Bibliothek auf dem Server nur als 64-Bit-DLL installiert ist (ich habe keine Erfahrung mit dieser Bibliothek arbeiten) –

0

System.Data.OracleClient ist seit Jahren deprecated und sollte nicht mehr verwendet werden. Es ist nur für x86 (32 Bit) verfügbar, als Microsoft die Entwicklung von System.Data.OracleClient 64-Bit-Windows aufgab, war das noch nicht üblich.

Verwenden Sie besser den ODP.NET-Provider von Oracle, der für x86 und x64 verfügbar ist.

prüft auch diese Anweisung: BadImageFormatException. This will occur when running in 64 bit mode with the 32 bit Oracle client components installed

+0

Dieser OracleClient funktioniert für uns im 64-Bit-Server ewig. Jetzt trat das Problem plötzlich auf, als wir 32bit im IIS aktivieren mussten. – smilu

+0

Ja, im 32bit-Modus arbeitet 'System.Data.OracleClient' (noch). Trotzdem ist es seit mehr als einem Jahrzehnt veraltet. 'System.Data.OracleClient' kann nicht in 64-Bit-Anwendungen funktionieren - das ist nicht möglich. –

+0

Ich weiß es nicht. Ich hatte auch den gleichen Eindruck, dass es nur als 32 Bit funktionieren sollte. Unsere Server werden für mehr als 2 Jahre auf 64 Bit aufgerüstet. Und auf unseren neuesten Servern ist nur ein 64-Bit-Oracle-Client installiert. Trotzdem funktioniert System.Data.OracleClient ohne 32bit im IIS Application Pool zu aktivieren. Aber wenn ich auf dem gleichen Server 32bit aktiviere, wird es nicht mehr funktionieren und BadImageFormat sagen. Deshalb verwirrt es mich auch. – smilu

Verwandte Themen