2013-07-24 32 views
6

Tôi chỉ cần làm theo các hướng dẫn tạiSQLite với "bất kỳ cpu" biên dịch tùy chọn [tai nạn trên máy tính 64 bit khi không được kiểm soát "thích 32 bit" tùy chọn]

SQLite-on-Visual-Studio-with-NuGet-and-Easy-Instructions

và tôi có thể có khả năng biên dịch mẫu C# appliation với

"any cpu"

tùy chọn.

Nhưng khi tôi chạy ứng dụng, nếu tôi chọn

"prefer 32 bit"

tùy chọn, tai nạn ứng dụng của tôi:

"Unable to load DLL "SQLite.Interop.dll"

Nếu tôi bỏ chọn "thích 32 bit" tùy chọn nó hoạt động tốt trên 64 bit của tôi máy móc.

Why this happen?Any suggestion to fix it?

PS: tôi sử dụng 64 bit Windows 8. và tôi cung cấp [x86] và [x64] thư mục cho SQLite.

PS 1: Lỗi:

System.TypeInitializationException: Loại initializer cho 'System.Data.SQLite.SQLiteFactory' ném một ngoại lệ. ---> System.DllNotFoundException: Không thể tải DLL 'SQLite.Interop.dll': Mô-đun được chỉ định không thể tìm thấy. (Ngoại lệ từ HRESULT: 0x8007007E) tại System.Data.SQLite.UnsafeNativeMethods.sqlite3_config_none (SQLiteConfigOpsEnum op) tại System.Data.SQLite.SQLite3.StaticIsInitialized() tại System.Data.SQLite.SQLiteLog.Initialize() tại System.Data.SQLite.SQLiteFactory..cctor() --- End của nội ngoại lệ stack trace --- tại System.Data.SQLite.SQLiteFactory..ctor()

PS 3:

I notice an interesting thing. Although at visual studio it craches, when i run my program exe, by just clicking it, it works.

+1

Gỡ lỗi ứng dụng của bạn và tìm hiểu điều này trả về: System.IO.Directory.GetCurrentDirectory(); Đây là nơi mà .dll của bạn có thể phải là. – user1132959

+0

Vâng nó cung cấp cho thư mục bin của tôi trong chế độ gỡ lỗi F: \ TestWorkSpace \ SQLiteTest \ bin \ Debug và có thư mục x86 có SQLite.Interop.dll.SQLite nói rằng nó sẽ xem xét thư mục x86 –

+0

Khi tôi gỡ lỗi, Mặc dù tôi chọn "perefer 32 bit" ... Nó cố gắng tải dưới x64. "Đang cố tải thư viện SQLite bản địa" F: \ TestWorkSpace \ SQLiteTest \ bin \ Debug \ x64 \ SQLite.Interop.dll "..." –

Trả lời

3

Chạy lời nhắc lệnh với tư cách Quản trị viên. cd vào thư mục với x64 .dll của bạn. Sau đó nhập: gacutil -i SQLite.Interop.dll. Sau đó, cd vào thư mục có x86 .dll. Nhập lại: gacutil -i SQLite.Interop.dll. Bây giờ nó phải làm việc đúng.

Điều này thực hiện là cài đặt từng hội đồng vào GAC (Global Assembly Cache) trên hệ thống của bạn. Nó đặt chúng vào thư mục cache hệ thống thích hợp tùy thuộc vào cách nó được biên dịch (x86 hoặc x64). Điều này chỉ nên được sử dụng cho mục đích gỡ lỗi.

GAC 32bit vs. 64bit

Đối với máy khách. Thực hiện triển khai cho x86 và x64 mỗi. Tất nhiên, ném vào phiên bản thích hợp của bạn cho mỗi.

+1

Tôi không muốn cài đặt chúng vào GAC. Tôi muốn cơ sở dữ liệu nhúng đơn giản mà không cần cài đặt-cấu hình. Vì vậy, tôi chọn SQLite –

+0

GAC là dành cho mục đích gỡ lỗi, tôi đã chỉnh sửa thích hợp. Bạn muốn có một cơ sở dữ liệu đơn giản cho khách hàng hoặc cho chính mình? – user1132959

+1

Đối với khách hàng và tôi. Vì vậy, sử dụng GAC là ý tưởng tồi. Tôi có rất nhiều vấn đề với nó trước đây. –

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