2013-07-24 12 views
6

mi basta seguire le istruzioni aSQLite con "qualsiasi CPU" compilare l'opzione [incidente su una macchina a 64 bit quando incontrollato "preferire a 32 bit" opzione]

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

e posso in grado di compilare campione C# appliation con

"any cpu"

opzione.

Ma quando si esegue l'applicazione, se scelgo

opzione

"prefer 32 bit"

, il mio crash dell'applicazione:

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

Se io deselezionare "preferiscono 32 bit" opzione funziona bene sul mio 64 bit macchina.

Why this happen?Any suggestion to fix it?

PS: io uso a 64 bit di Windows 8. e fornisco [86] e [64] cartelle per SQLite.

PS 1: Errore:

System.TypeInitializationException: L'inizializzatore di tipo per 'System.Data.SQLite.SQLiteFactory' ha generato un'eccezione. ---> System.DllNotFoundException: impossibile caricare DLL 'SQLite.Interop.dll': Impossibile trovare il modulo specificato. (Eccezione da HRESULT: 0x8007007E) a System.Data.SQLite.UnsafeNativeMethods.sqlite3_config_none (SQLiteConfigOpsEnum op) a System.Data.SQLite.SQLite3.StaticIsInitialized() a System.Data.SQLite.SQLiteLog.Initialize() a System.Data.SQLite.SQLiteFactory..cctor() --- Fine dell'analisi dello stack eccezione --- a 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

Eseguire il debug dell'applicazione e scoprire cosa restituisce: System.IO.Directory.GetCurrentDirectory(); Questo è dove il tuo .dll dovrà probabilmente essere. – user1132959

+0

Bene dà la directory my bin in modalità debug F: \ TestWorkSpace \ SQLiteTest \ bin \ Debug e c'è una cartella x86 che ha SQLite.Interop.dll.SQLite dice che guarderà la cartella x86 –

+0

Quando eseguo il debug, anche se scelgo "perefer 32 bit" ... Prova a caricare sotto x64. "Tentativo di caricare la libreria SQLite nativa" F: \ TestWorkSpace \ SQLiteTest \ bin \ Debug \ x64 \ SQLite.Interop.dll "..." –

risposta

3

Eseguire il prompt dei comandi come amministratore. cd nella directory con x64 .dll. Quindi digitare: gacutil -i SQLite.Interop.dll. Quindi cd nella directory con x86 .dll. Scrivi di nuovo: gacutil -i SQLite.Interop.dll. Ora dovrebbe funzionare bene.

Ciò che fa è installare ciascun assembly nel GAC (Global Assembly Cache) sul sistema. Li inserisce nella directory della cache di sistema corretta in base a come è stata compilata (x86 o x64). Questo dovrebbe essere usato solo a scopo di debug.

GAC 32bit vs. 64bit

Per una macchina client. Esegui una distribuzione per x86 e per x64 ciascuno. Naturalmente, inserisci la versione corretta del file .dll per ciascuno.

+1

Non voglio installarli in GAC. Voglio un semplice database incorporato senza installazione-configurazione. Quindi scelgo SQLite –

+0

GAC per scopi di debug, ho apportato la modifica corretta. Vuoi un semplice database per i clienti o per te stesso? – user1132959

+1

Per clienti e me. Quindi usare GAC è una pessima idea. Ho un sacco di problemi con esso prima. –

Problemi correlati