2015-05-22 10 views
5

Siamo passati da sqlite-net a sqlite.net PCL edition. Il nostro progetto ha funzionato bene con quello vecchio - con l'edizione PCL, ora dobbiamo dichiarare esplicitamente la nostra piattaforma usando.sqlite.net PCL genera TypeInitalizationException

var conn = new SQLiteConnection(new SQLitePlatformWin32(), Path.Combine(folderPath, dbName)); 

Ma ora, quando chiamo questa linea, si ottiene un

Una prima eccezione di possibilità di tipo 'System.TypeInitializationException' avvenuto in SQLite.Net.Platform.Win32.dll

Ulteriori informazioni: l'inizializzatore del tipo per "SQLite.Net.Platform.Win32.SQLiteApiWin32Internal" ha generato un'eccezione.

l'eccezione interna ci dice

{ "Impossibile caricare la libreria SQLite nativa"}

Stacktrace:

a SQLite.Net.Platform.Win32. SQLiteApiWin32Internal.sqlite3_open_v2 (Byte [] filename, IntPtr & db, Int32 flags, IntPtr zvfs)

a SQLite.Net.Platform.Win32.SQLiteApiWin32.Open (byte [] nomefile, IDbHandle & db, bandiere Int32, zvfs IntPtr)

a SQLite.Net.SQLiteConnection..ctor (ISQLitePlatform sqlitePlatform, String databasePath , SQLiteOpenFlags openFlags, storeDateTimeAsTicks booleani, IBlobSerializer serializzatore, IDictionary 2 tableMappings, IDictionary 2 extraTypeMappings, IContractResolver resolver)

a SQLite.Net.SQLiteConnection..ctor (ISQLitePlatform sqlitePlatform, String databasePath, storeDateTimeAsTicks booleani, IBlobSerializer serializzatore, IDictionary 2 tableMappings, IDictionary 2 extraTypeMappings, IContractResolver resolver)

Tuttavia sqlite3.dll si trova nella cartella dell'applicazione e in realtà ha funzionato con la versione non funzionante. Ho giocato con la compilazione per x86 e x64 e scaricato l'ultimo sqlite3.dll per Win32 ma tutto senza successo. Cosa ci manca?

risposta

17

Ho avuto lo stesso problema in un progetto di test. Risolto aggiungendo il pacchetto http://www.nuget.org/packages/System.Data.SQLite.Core per SQLitePlatformWin32.

Anche se non è elencato come una dipendenza nella versione attuale, è stato in precedente del pacchetto di NuGet della piattaforma (http://www.nuget.org/packages/SQLite.Net.Platform.Win32/)

Inoltre: in caso di utilizzo SQLitePlatformGeneric una copia di sqlite3.dll dovrebbero essere messi in cartella di destinazione.

+1

Questa era la soluzione: erano i file interop dll mancanti e, dopo aver aggiunto il pacchetto principale al mio progetto, ha aggiunto anche quei file. È interessante notare che non ho dovuto aggiungere i file come dipendenza diretta nel mio progetto lib di classe (dove avevo i file sqlite pcl), ma al mio progetto GUI che è dipendente dalla lib di classe per farlo funzionare. – Marwie

+0

Assicurati di scegliere il pacchetto .Core corretto (x86/x64), non il pacchetto MSC .Core. –

+0

Qual è la differenza tra SQLitePlatformWin32 e SQLitePlatformGeneric? – batmaci