2015-05-22 22 views
5

Chúng tôi đã thay đổi từ phiên bản sqlite-net sang sqlite.net PCL. Dự án của chúng tôi hoạt động tốt với phiên bản cũ - với phiên bản PCL, giờ đây chúng tôi phải khai báo rõ ràng nền tảng của mình bằng cách sử dụng.sqlite.net PCL ném TypeInitalizationException

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

Nhưng bây giờ, khi tôi gọi dòng này, chúng ta có được một

Một ngoại lệ cơ hội đầu tiên của loại 'System.TypeInitializationException' xảy ra ở SQLite.Net.Platform.Win32.dll

Thông tin bổ sung: Trình khởi tạo kiểu cho "SQLite.Net.Platform.Win32.SQLiteApiWin32Internal" đã ném một ngoại lệ.

Các ngoại lệ bên trong cho chúng ta biết

{ "Không thể tải thư viện sql mẹ đẻ"}

stacktrace:

tại SQLite.Net.Platform.Win32. SQLiteApiWin32Internal.sqlite3_open_v2 (Byte [] tên tệp, IntPtr & db, cờ Int32, IntPtr zvfs)

tại SQLite.Net.Platform.Win32.SQLiteApiWin32.Open (Byte [] filename, IDbHandle & db, Int32 cờ, zvfs IntPtr)

tại SQLite.Net.SQLiteConnection..ctor (ISQLitePlatform sqlitePlatform, String DatabasePath , SQLiteOpenFlags openFlags, storeDateTimeAsTicks Boolean, IBlobSerializer serializer, IDictionary 2 tableMappings, IDictionary 2 extraTypeMappings, IContractResolver resolver)

tại SQLite.Net.SQLiteConnection..ctor (ISQLitePlatform sqlitePlatform, string DatabasePath, storeDateTimeAsTicks Boolean, IBlobSerializer serializer, IDictionary 2 tableMappings, IDictionary 2 extraTypeMappings, IContractResolver giải quyết)

Tuy nhiên sqlite3.dll nằm trong thư mục ứng dụng và nó thực sự đã hoạt động với phiên bản chưa được làm. Tôi chơi xung quanh với biên dịch cho x86 và x64 và tải về sqlite3.dll mới nhất cho Win32 nhưng tất cả đều không thành công. Chúng ta đang thiếu gì?

Trả lời

17

Tôi đã gặp vấn đề tương tự trong dự án thử nghiệm. Giải quyết nó bằng cách thêm gói http://www.nuget.org/packages/System.Data.SQLite.Core cho SQLitePlatformWin32.

Mặc dù không được liệt kê như là một sự phụ thuộc trong phiên bản thực tế, nó là một trong trước của gói NuGet của nền tảng (http://www.nuget.org/packages/SQLite.Net.Platform.Win32/)

Ngoài ra: trong trường hợp sử dụng SQLitePlatformGeneric một bản sao của sqlite3.dll nên được đặt trong thư mục đầu ra.

+1

Đây là giải pháp - đó là các tệp dll interop bị thiếu và sau khi thêm gói cốt lõi vào dự án của tôi, nó cũng đã thêm các tệp đó. Điều thú vị là tôi không phải thêm các tệp như là một phụ thuộc trực tiếp trong dự án lib lớp của tôi (nơi mà tôi có các tệp pcl sqlite) nhưng với dự án gui của tôi phụ thuộc vào lib của lớp để làm cho nó hoạt động. – Marwie

+0

Đảm bảo bạn chọn đúng gói .Core (x86/x64), không phải gói MSIL .Core. –

+0

sự khác nhau giữa SQLitePlatformWin32 và SQLitePlatformGeneric là gì? – batmaci

Các vấn đề liên quan