2015-05-22 10 views
5

sqlite-net'den sqlite.net PCL sürümüne değiştirdik. Projemiz eski ile iyi çalıştı - PCL baskısıyla, şimdi platformumuzu kullanarak açık bir şekilde ilan etmeliyiz. Bu hattını aradığındasqlite.net PCL, TypeInitalizationException'ı atar

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

Ama şimdi, biz

SQLite.Net.Platform.Win32.dll oluştu türü 'System.TypeInitializationException' bir

Ilk şansını istisna olsun

Ek bilgi: "SQLite.Net.Platform.Win32.SQLiteApiWin32Internal" için tür başlatıcısı bir istisna attı.

iç İstisna bize

söyler { "yerli sqlite kitaplığı yüklenemedi"}

StackTrace: SQLite.Net.Platform.Win32 de

. SQLiteApiWin32Internal.sqlite3_open_v2 (Byte [] dosya adı, IntPtr & db, Int32 bayrakları, IntPtr zvfs)

SQLite.Net.SQLiteConnection..ctor (ISQLitePlatform sqlitePlatform String DatabasePath de SQLite.Net.Platform.Win32.SQLiteApiWin32.Open de

(byte [] dosya adı, IDbHandle & db, ınt32 bayraklar, ıntptr zvfs)

, SQLiteOpenFlags openFlags, Boole storeDateTimeAsTicks, IBlobSerializer seri hale ıdictionary 2 tableMappings, IDictionary 2 extraTypeMappings, IContractResolver çözümleyici) SQLite.Net.SQLiteConnection..ctor (ISQLitePlatform sqlitePlatform string DatabasePath, Boole storeDateTimeAsTicks, IBlobSerializer seri hale de

ıdictionary 2 tableMappings, IDictionary 2 extraTypeMappings, IContractResolver çözümleyici)

Ancak sqlite3.dll uygulama klasöründedir ve aslında unforked sürümüyle çalışmıştır. Ben x86 ve x64 için derleme ile oynadım ve Win32 için en son sqlite3.dll indirildi ama hepsi başarılı olmadan. Neyi kaçırıyoruz?

cevap

17

Bir test projesinde de aynı sorun vardı. SQLitePlatformWin32 için http://www.nuget.org/packages/System.Data.SQLite.Core paketini ekleyerek çözdünüz. Gerçek sürümünde bir bağımlılık olarak belirtilmemesine rağmen

, bu (http://www.nuget.org/packages/SQLite.Net.Platform.Win32/)

Ayrıca platformun Nuget paketinin öncekine oldu: SQLitePlatformGeneric sqlite3.dll bir kopyasını kullanarak durumunda yerleştirilmelidir çıkış dizini.

+1

Bu çözüm oldu - eksik olan interop dll dosyalarıydı ve çekirdek paketini projeme ekledikten sonra bu dosyaları da eklediler. İlginç bir şekilde, dosyalarımı lib libite dosyamda (liblite pcl dosyalarına sahip olduğum yerde) doğrudan bir bağımlılık olarak eklemem gerekti, ancak çalışmam için sınıf kütüphanesine bağlı olan gui projemde. – Marwie

+0

MSIL .Core paketini değil, doğru .Core paketini (x86/x64) seçtiğinizden emin olun. –

+0

SQLitePlatformWin32 ve SQLitePlatformGeneric arasındaki fark nedir? – batmaci