Probleme mit FluentNHibernate + SQLite mit .NET4?
Ich habe eine WPF Anwendung mit VS2010 .Net3.5 Verwendung von Nhibernate mit FluentNHibernate + SQLite, und alle funktioniert.
Will ich jetzt ändern, um zu verwenden .Net4, aber dies hat sich in eine eher schmerzhafte Erfahrung dann habe ich gerechnet.. Beim einrichten der Verbindung habe ich, dies zu tun:
var cfg = Fluently.Configure().
Database(SQLiteConfiguration.Standard.ShowSql().UsingFile("MyDb.db")).
Mappings(m => m.FluentMappings.AddFromAssemblyOf<MappingsPersistenceModel>());
_sessionFactory = cfg.BuildSessionFactory();
Den BuildSessionFactory () - Aufruf wirft eine FluentConfigurationException sagen:
Einem ungültigen oder unvollständigen Konfiguration, die verwendet wurde, während der Erstellung einer SessionFactory. Überprüfen Sie PotentialReasons Sammlung und InnerException für mehr details.
Die innere Ausnahme gibt uns mehr Informationen:
Konnte nicht erstellt auch der Treiber von NHibernate.- Treiber.SQLite20Driver, NHibernate, Version=2.1.2.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4.
Und weitere InnerException:
Das IDbCommand-und IDbConnection Umsetzung in der assembly System.Daten.SQLite konnte nicht gefunden werden. Gewährleisten, dass die Montage-System.Daten.SQLite befindet sich in der Anwendungs-Verzeichnis oder im Global Assembly Cache. Wenn die assembly im GAC befindet, verwenden element in der Konfigurationsdatei der Anwendung angeben, den vollständigen Namen der assembly.
Nun - für mich klingt es nicht finden System.Data.SQLite.dll
, aber ich kann das nicht verstehen. Überall diese verwiesen wird, habe ich "Copy Local", und ich habe überprüft, dass es in jedem build-Ordner für Projekte mit SQLite. Habe ich auch kopiert, es manuell zu jedem Debug-Ordner von der Lösung - ohne Glück.
Hinweise:
- Das ist genau der gleiche code, der gut funktioniert, bevor ich aktualisiert .Net4.
- Ich habe einige x64-x86 mismatch-Probleme früher, aber ich wechselte zu verwenden x86 als Zielplattform und für alle referenzierten dlls. Ich habe überprüft, dass alle Dateien im Debug-Ordner x86.
- Ich habe versucht, die vorkompilierte Fließend dlls, die ich versucht habe zu kompilieren mich, und ich zusammengestellt haben, meine eigene version der Fließend mit .Net4.
- Ich sehe, dass es auch andere haben dieses problem gesehen, aber ich habe nicht wirklich gesehen keine Lösung.
Nachdem @devio die Antwort, die ich habe versucht, das hinzufügen einer Referenz auf die SQLite-dll. Das ist nicht nichts ändern, aber ich hoffe ich habe es richtig gemacht, wenn.. Dies ist, was ich Hinzugefügt, um die root-node der app.config-Datei:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="System.Data.SQLite" fullName="System.Data.SQLite, Version=1.0.60.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</assemblyBinding>
</runtime>
Jemand da draußen mit Fließend mit .Net4 und SQLite erfolgreich? Hilfe!!! Ich bin verloren...
- Jede Möglichkeit, dass es ein problem mit 2.x SQLite vs 3.x?
- Weiß nicht.. Sie denken? Warum würde es die Arbeit mit .Net3.5 dann? Werde versuchen, die neueste SQLite version bald..
- Haben Sie auch vor kurzem ein Upgrade auf höhere version von NHibernate? Ich habe ähnliche Probleme mit 2.1.2.4000 (aber MySQL in diesem Fall).
- Nein - wurde mit der gleichen version von NHibernate alle Weg. Alle arbeiten gut mit .NET3.5. Wechsel ich dann zu benutzen .NET4, und das problem zeigt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen Sie die version Ihres Systems.Daten-Referenz. Es klingt für mich wie-System.Daten.SqlLite nicht finden können, die version von IDbCommand und IDbConnection, dass es gebaut wurde, mit denen ich vermute, ist die version 2.0.0.0. Ich vermute, dass jetzt haben Sie aufgerüstet .Net 4 Sie verweisen-System.Daten version 4.0.0.0.
Wenn dies der Fall ist, sollten Sie in der Lage sein, eine Bindung hinzufügen umleiten, um das problem zu beheben:
Bekam ich auch die gleiche Fehlermeldung, wenn ich versuchte, Fließend mit .Net4 und SQLite, aber als ich näher hin sah, fand ich verschiedene Fehlermeldung.
Konnte nicht geladen Typ-System.Daten.SQLite.SQLiteConnection, System.Daten.SQLite.
System.IO.FileLoadException: Mixed mode assembly gebaut wird, gegen die version " v2.0.50727' der Laufzeit und kann nicht geladen werden in der 4.0-Laufzeit ohne zusätzliche Konfigurationsinformationen.
Also was ich getan habe ist, fügen Sie useLegacyV2RuntimeActivationPolicy="true" in der "startup" - tag wie diesem.
Brauche ich nicht hinzufügen dependentAssembly oder irgendwas in der "runtime" - tag. Nach dieser link-text und diese link-text, sollte es für die migration verwendet werden Beihilfen nur. Also hoffentlich, SQLite wird in Kürze aktualisiert.
Hoffe, das hilft!
Karlkim
Ich hatte ein ähnliches problem mit NH, VS2010, .Net4, aber mit der Oracle ODP.Net Treiber und 32bit.
War die Lösung deklarieren Sie eine "qualifizierte Montage" im web.config-Datei mit einer expliziten Versionsnummer. Siehe meine Zusammenfassung.
Vielleicht ist dies die Lösung für Ihr problem.
Habe ich es geschafft, es zu beheben durch ändern der Zielplattform auf x86-Projekt debug-Einstellung. Ich bin mit vs2010.
Ja, sir: haben Sie es, mit zu arbeiten .NET 4 - Fluent-NHibernate - NUnit -
Durch die Nutzung der Informationen aus den obigen posts habe ich es geschafft, es funktioniert unter Visual Studio 2010
und in meinem NUnit-Bibliothek für Tests zusammengestellt, die für Jede CPU in den debug-Modus.
Zuerst habe ich immer die gleiche Ausnahme wie einige von Euch Erfahrungen:
Ich verwendet habe, NUGet zum download der 1.0.76.0 version von SQLite für v4.0.30319 an .NET. Devios post vor und seine Zusammenfassung link hat mich zum testen assemblyBinding in meiner App.config-Datei - telling VS 2010 verwenden die richtige version von System.Daten.SQLite für NHibernate. Hier ist, was ich in meiner App.Config:
Wie ich wusste, die details in der App.config ?
Habe ich vorher auch installiert die statisch gelinkte Bibliothek für SQLite ist .NET 4 version von SQLite-website unter Ihre download-Bereich. Dies installiert die SQLite-Bibliothek auf meinem Rechner und fügte zu den Global Assembly Cache - im Gegenzug geben Sie mir die Informationen, die ich brauchte, um zu Bearbeiten, die App.config mit der Eingabeaufforderung Visual Studio 2010:
Normalerweise würde ich .NET Reflector von RedGate für das extrahieren von Informationen von dll ' s von meiner zuvor NUget Hinzugefügt System.Daten.SQLite dll Datei, aber die
gacutil -l System.Data.SQLite
ist ok, wenn Sie Sie bereits installiert haben, SQLite auf Ihrem system, die richtige version ist.Zuvor bekam ich auch die mixed mode assembly Ausnahme:
Dann, wenn ich das nutzen wollte .NET 2.0-version von SQLIte würde ich einfügen die folgenden, um meine App.config:
Aber jetzt, dass ich eine .NET 4 version von SQLite brauche ich mich nicht zu den alten .NET-2-version und im legacy-Modus - auf die Vermeidung potenzieller Konflikte weiter mit In-Process Side-by-Side-Runtime-Host die Aktivierung zu Google MSDN:
Dank an alle Jungs für den Hinweis mich in die richtige Richtung !
Hoffentlich wird es einfacher für andere, die nach uns um dieses Problem zu beheben, von nun an.
Lösung:
Test-Einstellungen:
wählen Sie hosts
wählen Sie tests ausführen, die im 64-bit-Prozess auf 64-bit-Maschine
Ich versuchte jede Lösung auf dieser Seite und nichts ging mehr. Dann habe ich deinstalliert, meine 64bit-version und verwendet die x86-version von Nuget und alles funktionierte.
PM> Install-Paket-System.Daten.SQLite.x86