System.Daten.SQLite-die nicht auf nicht-PC-Entwicklung
Erstellte ich ein C# - Projekt in Visual Studio und verwendet werden, eine Montage auf die SQLite-4.0 ADO-Bibliothek von http://sqlite.phxsoftware.com/.
Das Programm läuft gut an der Entwicklung der Maschine, aber wenn ich versuche, führen Sie es auf einem anderen system, es tritt immer eine Fehlermeldung, die besagt, dass System.Data.SQLite.dll kann nicht gefunden werden. Ich setzte die Datei in das Programm-Verzeichnis. Ich habe auch versucht, es in einem Verzeichnis aufgeführt ist unter dem PFAD. Irgendwelche Vorschläge?
Bin ich mit einem openFileDialog öffnen der Datenbank. Hier ist der entsprechende code:
con = new SQLiteConnection();
OpenFileDialog ofd1 = new OpenFileDialog();
ofd1.Filter = "db Datei (*.db)|*.db|Alle Dateien (*.*)|*.*";
if (ofd1.ShowDialog() == DialogResult.OK)
filepath = ofd1.FileName;
filepath.Replace("\\", "\\\\");
con.ConnectionString = "Data Source= \"" + filepath + "\"";
[...]
Wie bereits erwähnt, dies funktioniert auf dem Entwicklungsrechner (Windows 7, 64bit).
Die test-Maschine läuft in einer virtualbox (Windows 7, 32bit).
Tritt die folgende Ausnahme:
System.IO.FileNotFoundException: Die Datei oder Assembly "System.Data.SQLite.dll" oder eine Abhängigkeit davon wurde nicht gefunden. Das angegebene Modul wurde nicht gefunden.
Dateiname: "System.Data.SQLite.dll"
bei WindowsFormsApplication1.Form1.button2_Click(Object sender, EventArgs e)
bei System.Windows.Forms.Control.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
bei System.Windows.Forms.Button.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Geladene Assemblys **************
mscorlib
Assembly-Version: 4.0.0.0.
Win32-Version: 4.0.30319.1 (RTMRel.030319-0100).
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll.
----------------------------------------
WindowsFormsApplication1
Assembly-Version: 1.0.0.0.
Win32-Version: 1.0.0.0.
CodeBase: file:///C:/Users/andi/Documents/My%20Dropbox/Own%20Public%20Folders/Public%20(Andy%20Malessa)/juralookup(Wir%20brauchen%20dringend%20nen%20Namen)/DataManagementTool/WindowsFormsApplication1.exe.
----------------------------------------
System.Windows.Forms
Assembly-Version: 4.0.0.0.
Win32-Version: 4.0.30319.1 built by: RTMRel.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
----------------------------------------
System.Drawing
Assembly-Version: 4.0.0.0.
Win32-Version: 4.0.30319.1 built by: RTMRel.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
----------------------------------------
System
Assembly-Version: 4.0.0.0.
Win32-Version: 4.0.30319.1 built by: RTMRel.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll.
----------------------------------------
System.Windows.Forms.resources
Assembly-Version: 4.0.0.0.
Win32-Version: 4.0.30319.1 built by: RTMRel.
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
----------------------------------------
mscorlib.resources
Assembly-Version: 4.0.0.0.
Win32-Version: 4.0.30319.1 (RTMRel.030319-0100).
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_de_b77a5c561934e089/mscorlib.resources.dll.
----------------------------------------
Also im Grunde es sagt: "System.Data.SQLite.dll" oder eine Abhängigkeit wurde nicht gefunden.
Die Datei ist in dem Verzeichnis der Anwendung. Hier ist ein file-listing:
- Kannst du die genaue Fehlermeldung? Das könnte uns zu helfen.
- Mach ich heute Abend, nach meiner Arbeit Tag. Vielen Dank für die Hilfe so weit.
- Soeben die Frage mit mehr details.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim referenzieren der DLL gespeichert System.Data.SQLite.dll im GAC gespeichert, die auf Ihre Entwicklung Maschine von Ihrem C# - Projekt und, dass die DLL nicht vorhanden auf dem test-client, den Sie bekommen würde, die Nachricht. In diesem Fall müssen Sie entweder installieren SQLlite auf die test-Maschine (wodurch die DLL in den GAC), oder ändern Sie den Verweis in Ihrem Projekt auf die lokale DLL instaid.
Ich hatte dieses problem auch und ich denke, der erste Punkt fixiert es. Die Maschine, die Sie bereitstellen, auf nicht es im gac offensichtlich, und wenn Sie auf diese version, wird es nicht gefunden in den anderen Orten. Zumindest ist das die Erfahrung, die ich hatte.
Müssen Sie uns mehr details über die Ausnahme. In der Zwischenzeit versuchen Sie, den folgenden zu Ihrer app.config:
Ich habe das gleiche problem. Hier ist, was ich Tat und fand:
Ich hakte in der Anwendungsdomäne des AssemblyLoad Veranstaltung und verfolgt alle Assemblys, die geladen wurden. Ich habe dazu einen Verweis auf eine Klasse in System.Data.SQLite.dll zu erzwingen, bevor es verwendet wurde, Fluent NHibernate. Und siehe da, SQLite geladen wurde, aus dem GAC. Keine Ahnung, wie es dort ankam, da ich nur die ZIP-Datei heruntergeladen der .Net-Anbieter.
Dies ist der Grund, warum System.Data.SQLite.dll kopiert die lokale im Projekt (Projekt A), die direkt verweist, aber nicht in Projekte, Referenz-Projekt A. Für Sie ist das kopieren nicht notwendig, da sich die Datei befindet, in den GAC. In meinem konkreten Fall, die NHibernate.- Treiber.SQLite20Driver versuchen würden, um das System zu starten.Daten.SQLite-assembly, aber für was auch immer Gründe es nicht zu tun. Vielleicht ist es wirklich erwartet, dass die Versammlung in der Ausgabe-Ordner, aber dann wiederum sehe ich AssemblyResolve-versuche, die DLL, die bedeuten sollte, dass es verwendet standard .Net-Methoden, um die assembly zu laden.
In jedem Fall war die Lösung, und Haken das AssemblyResolve-handler in meine Daten zugreifen DLL:
Hoffe, das hilft, Christoph
Für Leute, die installieren ADO.NET SQLite-Provider auf dem client-Rechner aus die option:
Bitte laden Sie die Microsoft Visual C++ 2010 Redistributable Package (x86) für 32bit und Microsoft Visual C++ 2010 Redistributable Package (x64) für 64bit windows, und installieren Sie auf den client-Maschinen. Dass das problem bei mir gelöst.
Können Sie
DEPENDS.EXE
zu findenDLLs
die werden beachtet IhrSystem.Data.SQLite.dll
Bibliothek.In meinem Fall
System.Data.SQLite.dll
nicht laden wollen, ohnemsvcr100.dll
(C-Runtime-Bibliothek für native-code). Hinzufügen in die Verzeichnis der Anwendung hat das problem gelöst.Hinweis: C-Laufzeit-Bibliothek ist Plattform abhängig!