Ich habe ELMAH 1.1 .Net 3.5 x64 in meinem ASP.NET-Projekt installiert und erhalte jetzt die folgende Fehlermeldung (wenn ich versuche, eine Seite anzuzeigen):
Datei oder Assembly 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Es wurde versucht, ein Programm mit einem falschen Format zu laden.
Beschreibung: Während der Ausführung der aktuellen Webanforderung ist eine nicht behandelte Ausnahme aufgetreten. Bitte überprüfen Sie die Stapelverfolgung, um weitere Informationen über den Fehler und dessen Ursprung im Code zu erhalten.
Ausnahmedetails: System.BadImageFormatException: Datei oder Assembly 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Es wurde versucht, ein Programm mit einem falschen Format zu laden.
Weitere Fehlerdetails unten.
Meine Active Solution-Plattform ist "Beliebige CPU" und ich verwende ein x64-Windows 7 auf einem x64-Prozessor. Der Grund, warum wir diese Version von ELMAH verwenden, ist, dass 1.0 .Net 3.5 (x86, die einzige Plattform, für die es kompiliert wurde) auf unserem x64-Windows-Server denselben Fehler verursachte.
Ich habe versucht, für x86 und x64 zu kompilieren, und ich erhalte den gleichen Fehler. Ich habe versucht, die gesamte Compiler-Ausgabe (bin und obj) zu entfernen. Schließlich habe ich direkt auf die SQLite-DLL verwiesen, was nicht erforderlich war, damit das Projekt auf dem Server funktioniert, und ich habe diesen Compilerfehler:
Fehler 1 Warnung als Fehler: Assemblygenerierung - Die referenzierte Assembly 'System.Data.SQLite.dll' zielt auf ein anderes Prozessor-MyProject ab
Irgendwelche Ideen, was das Problem sein könnte?
Weitere Fehlerdetails:
Quellfehler:
Während der Ausführung der aktuellen Webanforderung wurde eine nicht behandelte Ausnahme generiert. Informationen zum Ursprung und Ort der Ausnahme können mithilfe der folgenden Ausnahmestapelverfolgung identifiziert werden.
Stapelverfolgung:
[BadImageFormatException: Datei oder Assembly 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Es wurde versucht, ein Programm mit einem falschen Format zu laden.]
System.Reflection.Assembly._nLoad (AssemblyName Dateiname, String codeBase, Evidence AssemblySecurity, Assembly locationHint, StackCrawlMark & stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +0
System.Reflection. .nLoad (AssemblyName Dateiname, String codeBase, Evidence AssemblySecurity, Assembly locationHint, StackCrawlMark & stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +43
System.Reflection.Assembly.InternalLoad (AssemblyName AssemblyRef, Evidence AssemblySecurity, StackCrawlMark & StackMark, Boolean forIntrospection) Laden (String AssemblyString) +28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper (String AssemblyName, Boolean starDirective) +46[ConfigurationErrorsException: Datei oder Assembly 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Es wurde versucht, ein Programm mit einem falschen Format zu laden.]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper (Zeichenfolge AssemblyName, Boolean starDirective) +613 System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory () +203 SystemWfiguration .CompilationSection.LoadAssembly (AssemblyInfo ai) +105
System.Web.Compilation.BuildManager.GetReferencedAssemblies (CompilationSection compConfig) +178
System.Web.Compilation.BuildProvidersCompiler..ctor (VirtualPath configPath, BooleanAusgabeLokalUserUnterAnleitung)
System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult (Boolean isPrecompiledApp) +232
System.Web.Compilation.BuildManager.CompileGlobalAsax () +52 System.Web.Compilation.BuildManager.En[HttpException (0x80004005): Datei oder Assembly 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Es wurde versucht, ein Programm mit einem falschen Format zu laden.]
System.Web.Compilation.BuildManager.ReportTopLevelCompilationException () +58 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled () +512 System.Web.Hosting.HostingEnvironment. ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters HostingParameters) +729[HttpException (0x80004005): Datei oder Assembly 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Es wurde versucht, ein Programm mit einem falschen Format zu laden.]
System.Web.HttpRuntime.FirstRequestInit (HttpContext-Kontext) +8896783
System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContext-Kontext) +85
System.Web.HttpRuntime.Proquest ) +259
Antworten:
System.Data.SQLite.dll
ist eine gemischte Assembly, dh sie enthält sowohl verwalteten Code als auch nativen Code. Daher ist ein bestimmtesSystem.Data.SQLite.dll
entweder x86 oder x64, aber niemals beides.Update (mit freundlicher Genehmigung von J. Pablo Fernandez ): Cassini, der von Visual Studio verwendete Entwicklungswebserver, wenn Sie F5 drücken oder auf die grüne Schaltfläche "Wiedergabe" klicken, ist nur x86, was bedeutet, dass Sie es auch sind, wenn Ihre Workstation x64 ist kann die x86-Version von System.Data.SQLite.dll verwenden.
Eine Alternative besteht darin, nicht Cassini zu verwenden, sondern IIS7, das ordnungsgemäß x64 ist.
quelle
Stellen Sie sicher, dass "32-Bit-Anwendungen aktivieren" für den App-Pool auf "false" gesetzt ist.
quelle
Gehe zum
IIS7 Application Pool -> advanced settings and set the 32-bit application to true
.quelle
Dies ist sehr einfach, wenn Sie SQLite nicht verwenden:
Sie können die SQLite-DLLs aus den Bin-Ordnern Ihrer Lösung und dann aus dem Ordner löschen, in dem Sie auf ELMAH verweisen. Wird neu erstellt und Ihre App versucht nicht, diese DLL zu laden, die Sie nicht verwenden.
quelle
Ich habe eine 64-Bit-Entwicklungsmaschine und einen 32-Bit-Build-Server. Ich habe diesen Code vor der NHibernate-Initialisierung verwendet. Wirkt auf jede Architektur (sowohl die 2, die ich getestet habe)
Hoffe das hilft jemandem.
Guido
quelle
In unserem Fall hat es nicht funktioniert, weil unser Produktionsserver fehlt
Weiterverteilbares Microsoft Visual C ++ 2010 SP1-Paket (x86)
Wir haben es installiert und alles funktioniert gut. Für den Anwendungspool muss "32-Bit-Anwendungen aktivieren" auf "true" gesetzt sein, und Sie müssen die x86-Version der Bibliothek verwenden
quelle
Als jemand, der sich mit einigen Fehlerberichten im Roadkill-Wiki mit genau demselben Problem befassen musste, müssen Sie Folgendes tun:
System.Data.SQLite.dll
System.Data.SQLite.Linq.dll
Es ist ein echtes Ärgernis, durch wie viele Rahmen Sie springen müssen, wenn Sie die SQLite .NET-Binärdateien neu verteilen. Meine Lösung für Roadkill bestand letztendlich darin, die richtigen Binärdateien basierend auf der von Ihnen verwendeten Architektur in den Ordner ~ / bin zu kopieren . Leider löst das das C ++ - Laufzeitproblem nicht.
quelle
Ich habe dieses Problem behoben, indem ich System.Data.SQLite mit der Erweiterung Nuget installiert habe. Diese Erweiterung kann für Visual Studio 2010 oder höher verwendet werden. Zuerst müssen Sie die Nuget-Erweiterung installieren. Sie können hier folgen:
Zweitens können Sie jetzt SQLite installieren:
Und jetzt können Sie System.Data.SQLite verwenden.
In diesem Fall sehen Sie zwei Ordner x64 und x86. Diese Ordner enthalten SQLite.Interop.dll. Gehen Sie nun zu den Eigenschaftenfenstern dieser DLLs und legen Sie fest, dass die Build-Aktion Inhalt ist und "In Ausgabeverzeichnis kopieren" immer "Kopieren" ist.
Das ist also mein Weg.
Vielen Dank. Kim Tho Pham, HoChiMinh Stadt, Vietnam. E-Mail: [email protected]
quelle
Die manuelle lastbezogene System.Data.SQLite-Assembly kann dies beheben.
Der Code von gatapia wurde wie folgt geändert:
quelle
Ich habe diesen Fehler erhalten, als unser Windows-Server von 32-Bit-Betriebssystem auf 64-Bit konvertiert wurde. Die Assembly, die den Fehler ausgelöst hat, wurde so eingestellt, dass sie im x86-Modus (dh im 32-Modus) kompiliert wird. Ich habe es auf "Any CPU" umgestellt und das hat den Trick gemacht. Sie können diesen Wert folgendermaßen ändern:
Klicken Sie mit der rechten Maustaste auf das Projekt und gehen Sie zu
Properties -> Build -> Platform Target -> change to "Any CPU"
quelle
Seltsamerweise habe ich dies behoben, indem ich System.Data.SQLite über die Nuget-GUI-Anwendung im Gegensatz zur Paketmanagerkonsole installiert habe.
Die Installation über die Konsole enthielt nicht die Abhängigkeiten, die diese Bibliothek ausführen muss.
quelle
System.Data.SQLite
hängt davon abSystem.Data.SQLite.interop
, ob beide Pakete dieselbe Version und beide x86 sind .Dies ist eine alte Frage, aber ich habe alles versucht. Ich habe an einem ausschließlich x86- Projekt gearbeitet, daher gab es nicht zwei Ordner / x86, / x64. Aber aus irgendeinem Grund war das
System.Data.SQLite
eine andere Version alsSystem.Data.SQLite.interop
, nachdem ich passende DLLs heruntergezogen hatte, wurde das Problem behoben.quelle
Ich habe 2 schnelle Lösungen gefunden. Entweder für mich arbeiten. Ich denke, das Problem liegt an den Berechtigungen.
1) Anstatt die Datei Elmah.dll aus dem Verzeichnis net-2.0 zu verwenden, habe ich Elmah.dll aus net-1.1 verwendet.
2) Anstatt Elmah.dll im Projekt-Bin-Verzeichnis zu belassen. Ich mache ein DLL-Verzeichnis, um es abzulegen.
quelle
Eine andere Möglichkeit, dies zu umgehen, besteht darin, Ihre Anwendung auf ELMAH 1.2 anstatt auf 1.1 zu aktualisieren.
quelle
Können Sie Ihren bin-Debug-Ordner löschen und erneut kompilieren?
Oder überprüfen Sie Ihren Projektverweis auf
System.Data.SQLite
, finden Sie heraus, wo er sich befindet, und öffnen Sie dann die DLL im Reflektor. Wenn Sie es nicht öffnen können, bedeutet dies, dass die DLL beschädigt ist. Möglicherweise möchten Sie eine korrekte finden oder das .net-Framework neu installieren.quelle
Wenn Sie IIS Express als Webserver auf Ihrem Entwicklungscomputer verwenden, würde ich zu Local IIS wechseln. Das hat bei mir funktioniert.
quelle
Dies ist ein alter Beitrag, aber es kann einigen Personen, die nach diesem Fehler suchen, helfen, "32-Bit-Anwendungen aktivieren" für den App-Pool auf "Wahr" zu setzen. Das hat den Fehler für mich behoben. Ich bin auf diese Lösung gestoßen, indem ich einige Kommentare zu @ beckelmws Antwort gelesen habe.
quelle
Sie haben wahrscheinlich das falsche Paket installiert. Sie möchten das von Microsoft erstellte Paket, das das System.Data.Common-Anbietermodell implementiert.
quelle