it-swarm.com.de

Datei oder Assembly 'Oracle.DataAccess' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Es wurde versucht, ein Programm mit einem falschen Format zu laden

Ich habe eine Web-App auf IIS 7.0 Windows Server 2008 R2 64bit ... installiert. Ich verweise auf eine Oracle.DataAccess.dll. Wenn ich versuche, auf die Anwendung zuzugreifen, wird die folgende Meldung angezeigt: .__ Msgstr "Datei oder Assembly 'Oracle.DataAccess' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Es wurde versucht, ein Programm mit einem falschen Format zu laden." Kann mir bitte jemand helfen?

14
Smehrt Tonni

Es scheint, dass der Installationsprozess der Oracle Data Access Component, der die Version "11.2 Release 3 (11.2.0.2.1) mit Xcopy Deployment" verwendet, fehlerhaft ist. Um dies zu beheben, müssen Sie die fehlenden Baugruppen im GAC registrieren. Führen Sie für diese bestimmte Version die folgenden Befehle in einer Administratorkonsole aus:

md C:\Windows\Assembly\GAC_32\Oracle.DataAccess\4.112.2.0__89b483f429c47342\

copy %Oracle_HOME%\odp.net\bin\4\Oracle.DataAccess.dll C:\Windows\Assembly\GAC_32\Oracle.DataAccess\4.112.2.0__89b483f429c47342\

md C:\Windows\Assembly\GAC_32\Oracle.Web\4.112.2.0__89b483f429c47342\

copy %Oracle_HOME%\asp.net\bin\4\Oracle.web.dll C:\Windows\Assembly\GAC_32\Oracle.Web\4.112.2.0__89b483f429c47342\

Beachten Sie, dass dies nur die DLL-Ressourcen, aber keine anderen Sprachressourcen registriert. Wenn Sie also eine andere Sprache als Englisch verwenden (de, es, fr, it, ja, ko, pt-BR, zh-CHS und zh-CHT), müssen Sie diese ebenfalls mit der entsprechenden Ressource registrieren Datei.

Wenn Sie Visual Studio auf dem Computer installiert haben, können Sie stattdessen die folgenden Befehle ausführen:

gacutil /i %Oracle_HOME%\odp.net\bin\4\Oracle.DataAccess.dll
gacutil /i %Oracle_HOME%\asp.net\bin\4\Oracle.web.dll

Hinweis: Suchen Sie nach gacutil.exe im Installationsordner von Visual Studio.

Hoffe das hilft.

P.S. Oder Sie können das versuchen.

16
George Netu

Ich habe es vermieden, die 11.2 Release 5-Assemblys in der GAC zu registrieren, indem "Aktivieren von 32-Bit-Anwendungen" für den Anwendungspool auf true gesetzt wurde.

12
Jeremy Cook
11
Jaanus

Sie müssen diese DLL mit GAC util auf dem Live-Server registrieren. Prüfen Sie auch, ob es sich im Ordner bin befindet oder nicht. Bei einigen fehlenden DLLs im Bin-Verzeichnis tritt derselbe Fehler auf

5
user240141

In meinem Fall verwende ich VS 2010, Oracle v11 64 Bit. Ich kann im 64-Bit-Modus veröffentlichen (Einstellung auf "Any Cpu" in der Web Project-Konfiguration), und ich kann IIS auf Production Server auf 32-Bit-Kompatibilität auf "false" setzen (da der Server 64-Bit hat und mir gefällt um es auszunutzen).

Dann, um das Problem "Datei oder Assembly" Oracle.DataAccess "konnte nicht geladen werden" (manchmal erscheint die Fehlermeldung "Compiler-Fehlermeldung: CS1705: Assembly"): 

  • Auf dem lokalen PC und Server ist Oracle v11 mit 64 Bit installiert.
  • In allen Local Dev PC verweise ich auf Oracle.DataAccess.dll (C:\app\user\product\11.2.0\client_1\odp.net\bin\4), was 64-Bit ist. 
  • In IIS Production Server habe ich die 32-Bit-Kompatibilität auf False gesetzt.
  • Die Referenz im Webprojekt unter System.Web.Mvc.dll war die Version v3.0.0.1 auf dem lokalen PC. In Production befindet sich jedoch nur die Installierte MVC-Version 3.0.0.0. Das Update funktionierte also lokal mit MVC 3.0.0.0 und nicht 3.0.0.1 und wurde erneut auf dem Server veröffentlicht, und es funktioniert.
4

Installieren des 64-Bit-ODAC 11.2 Release 3 (11.2.0.2.1) Xcopy für Windows x64 von:

http://www.Oracle.com/technetwork/database/windows/downloads/index-090165.html

Es wurde für mich behoben. Stellen Sie sicher, dass Sie Ihren Systempfad gemäß Schritt 4 der Readme-Datei aktualisieren.

3
Ross

Die akzeptierte Antwort, die von George Netu veröffentlicht wurde, half, mein Problem zu lösen, aber ich musste mit ein paar Kleinigkeiten spielen:

Problembeschreibung:

Unter C:\Windows\Assembly habe ich zwei Oracle.DataAccess - Elemente (GAC-Ordner?) Gefunden. Relikt, verursacht durch mehrere Oracle-Client-Installationen. Ein Element zeigte Version 2.112.1.0, war jedoch tatsächlich Version 2.121.2.0 (sichtbar durch Properties-> Version). Diese Inkonsistenz war der Fehler.

Erste nicht hilfreiche Versuche:

  • versuchte, den Oracle-Vollclient zu deinstallieren und erneut zu installieren, beide Versionen Runtime/Administrator
  • versuchte, die korrekten DLL-Dateien erneut bereitzustellen
  • es wurde versucht, die neu installierten Baugruppen in den GAC-Server zu kopieren, wie in der oben angegebenen akzeptierten Antwort mit dem Befehl Prompt angegeben (aber das hat den Versionskonflikt nicht gelöst.)
  • versuchte, gacutil /i ... zu verwenden

Endgültiger Erfolg:

Ich landete auf der Msdn-Seite Gacutil.exe und konnte die Elemente letztendlich aus dem Ordner C:\Windows\Assembly löschen.

gacutil /u Oracle.DataAccess, Version=2.112.1.0, Culture="Neutral",PublicKeyToken=45e343aae32233ca
gacutil /u Oracle.DataAccess, Version=2.212.2.0, Culture="Neutral",PublicKeyToken=45e343aae3223abc
gacutil /u Oracle.Web, Version=2.112.1.0, Culture="Neutral",PublicKeyToken=45e343aae3223def

Danach wiederholte ich die beiden gacutil /i ...-Befehle und die beiden DLLs erschienen dort in konsistenten Versionen.

Endlich wurde der IIS neu gestartet und es funktioniert.

1
florian.isopp

Ja, es ist ein ziemlich nerviges Thema, mit dem ich manchmal konfrontiert wurde. Das Hauptproblem ist, dass eine Webanwendung falsch 32-Bit-Oracle.DataAccess.dll anstelle von 64-Bit oder umgekehrt verwendet. Dafür gibt es einige Lösungen.

1. Aktivieren Sie 32-Bit-Anwendungen im Anwendungspool, wenn Ihre Anwendung 64-Bit ist und 32 Bit Oracle.DataAccess.dll ausgeführt werden muss.

Gehen Sie zu IIS und setzen Sie die Option "32-Bit-Anwendungen aktivieren" in den erweiterten Einstellungen eines Anwendungspools auf "true".

2. Referenz-DLL korrigieren. 

Der Referenzpfad soll ein vom Oracle-Installationsprozess konfigurierter Systemreferenzpfad sein. In einigen Fällen, z. B. beim Installieren oder Aktualisieren einer neuen Oracle-Version, werden die alten DLLs nicht aktualisiert, der Pfad wird geändert oder ein Verweis im Webanwendungsprojekt nicht aktualisiert. Daher sollten wir den Oracle.DataAccess-Verweis manuell korrigieren. 

Wechseln Sie zur Webanwendung, und entfernen Sie den Oracle.DataAccess-Verweis. Fügen Sie eine neue Referenz für Oracle.DataAccess hinzu. Es muss die richtige Oracle.DataAccess.dll aus Ihrem Oracle-Installationspfad sein. Zum Beispiel: 

C:\Oracle\product\12.2.0\client_1\odp.net\bin\4\Oracle.DataAccess.dll

ODP.NET und abhängiges nicht verwaltetes DLL stimmen nicht überein So erzwingen Sie die Verwendung von Oracle.DataAccess.dll Assembly mit der korrekten Version von Bei nicht verwalteten DLLs wird eine Ausnahme ausgelöst, wenn Oracle.DataAccess.dll bemerkt, dass eine nicht übereinstimmende Version eines abhängigen, nicht verwalteten .__ geladen wurde. DLL.

https://docs.Oracle.com/cd/E11882_01/win.112/e23174/InstallODP.htm#ODPNT152

3. Einfache und schnelle Möglichkeit (aber keine geeignete Lösung) zur Behebung des Problems besteht darin, dass direkt eine Oracle.DataAccess.dll-Datei überschrieben wird, die aus dem Oracle-Installationspfad kopiert wird (beispielsweise C:\Oracle\product\12.2.0)\client_1\odp.net\bin\4 \) in den Ordner Bin Ihrer Webanwendung.

Hoffe das hilft dir ein bisschen. Viel Glück.

1
Alex

Ich hatte das gleiche Problem.

Ich gehe zu den Projekteigenschaften im allgemeinen Abschnitt, um das Plattformziel auf 64 Bit (x64) festzulegen, und mein Problem wurde gelöst

0
Hasan Fathi