2013-07-24 4 views
6

ich die Anweisung folgen Sie einfach aufSQLite mit "jede CPU" kompilieren Option [Absturz auf 64-Bit-Maschine, wenn nicht markiert "bevorzugen 32 Bit" option]

SQLite-on-Visual-Studio-with-NuGet-and-Easy-Instructions

und ich kann in der Lage Probe C# appliation kompilieren mit

"any cpu"

option.

Aber wenn ich Anwendung ausführen, wenn ich

"prefer 32 bit"

Option, mein Absturz der Anwendung wählen:

"Unable to load DLL "SQLite.Interop.dll"

Wenn ich deaktivieren Sie "bevorzugen 32 Bit" Option, es funktioniert auf meinem 64-Bit Maschine.

Why this happen?Any suggestion to fix it?

PS: Ich verwende 64-Bit-Windows 8 und ich biete [x86] und [x64] Ordner für SQLite.

PS 1: Fehler:

System.TypeInitializationException: Der Typ Initialisierer für 'System.Data.SQLite.SQLiteFactory' hat eine Ausnahme. ---> System.DllNotFoundException: DLL 'SQLite.Interop.dll' konnte nicht geladen werden: Das angegebene Modul konnte nicht gefunden werden. (Ausnahme von HRESULT: 0x8007007E) bei System.Data.SQLite.UnsafeNativeMethods.sqlite3_config_none (SQLiteConfigOpsEnum op) bei System.Data.SQLite.SQLite3.StaticIsInitialized() bei System.Data.SQLite.SQLiteLog.Initialize() bei System.Data.SQLite.SQLiteFactory..cctor() --- Ende der Ausnahmestapelüberwachung --- bei System.Data.SQLite.SQLiteFactory..ctor()

PS 3:

I notice an interesting thing. Although at visual studio it craches, when i run my program exe, by just clicking it, it works.

+1

Debuggen Sie Ihre Anwendung und finden Sie heraus, was dies zurückgibt: System.IO.Directory.GetCurrentDirectory(); Dies ist, wo Ihre .dll wahrscheinlich sein muss. – user1132959

+0

Nun gibt es das my bin-Verzeichnis im Debug-Modus F: \ TestWorkSpace \ SQLiteTest \ bin \ Debug und es gibt x86-Ordner, der SQLite.Interop.dll hat.SQLite sagt, es wird x86-Ordner –

+0

Wenn ich debuggen, Obwohl ich "pererefer 32 Bit" wählen ... Es versuchen, unter x64 zu laden. "Versuch, native SQLite-Bibliothek zu laden" F: \ TestWorkSpace \ SQLiteTest \ bin \ Debug \ x64 \ SQLite.Interop.dll "..." –

Antwort

3

Die Eingabeaufforderung als Administrator ausführen. cd in das Verzeichnis mit Ihrem x64 .dll. Geben Sie dann Folgendes ein: gacutil -i SQLite.Interop.dll. Dann cd in das Verzeichnis mit der x86-DLL. Geben Sie noch einmal ein: gacutil -i SQLite.Interop.dll. Jetzt sollte es richtig funktionieren.

Mit diesem Befehl wird jede Assembly in den GAC (Global Assembly Cache) auf Ihrem System installiert. Je nachdem, wie es kompiliert wurde (x86 oder x64), werden sie in das richtige System-Cache-Verzeichnis gestellt. Dies sollte nur für Debugging-Zwecke verwendet werden.

GAC 32bit vs. 64bit

Für eine Client-Maschine. Führen Sie eine Bereitstellung für x86 und für x64 durch. Natürlich werfen Sie für jede die richtige Version Ihrer .dll ein.

+1

Ich möchte sie nicht auf GAC installieren. Ich möchte einfache eingebettete Datenbank ohne installation-configuraton.So wähle ich SQLite –

+0

GAC ist für Debugging-Zwecke, machte ich die richtige Bearbeitung. Sie möchten eine einfache Datenbank für Kunden oder für sich selbst? – user1132959

+1

Für Kunden und mich. Die Verwendung von GAC ist also eine schlechte Idee. Ich habe vorher viele Probleme damit. –

Verwandte Themen