Su alcuni computer l'applicazione non può caricare il file dll sqlite
-
06-07-2019 - |
Domanda
Ho scritto un'applicazione che utilizza sqlite e funziona benissimo sulla maggior parte dei sistemi. È scritto in C # e l'unico assembly non framework è sqlite, incluso in System.Data.SQLite.dll.
Lo distribuisco allo stesso modo su tutte le macchine (copia e incolla il file exe, il file di database e il file System.Data.SQLite). Funziona benissimo per tutti i miei PC e la maggior parte dei PC che ho provato.
Ma poi ho notizie che per alcune persone genera la seguente eccezione:
Impossibile caricare il file o l'assembly "System.Data.SQLite, versione = 1.0.65.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139 'or una delle sue dipendenze. Un tentativo è stato fatto per caricare un programma con un formato errato.
Ora ho fatto in modo che il file dll si trovi nella stessa cartella del file exe dell'applicazione. È la stessa dll, con la stessa versione indicata nel messaggio di eccezione sopra.
Ne ero davvero confuso, quindi ho creato una nuova macchina virtuale, installato Windows 7 Professional su di essa, e ho semplicemente copiato i file incollati e la cosa ha funzionato. Quindi, se funziona su una nuova finestra, non riesco a immaginare cosa potrebbe mancare agli altri PC ...
Nota: due di quelle macchine in cui il progetto genera l'eccezione eseguono anche Windows 7 professionale.
Gradirei davvero qualsiasi aiuto su questo, perché sono fresco di idee ...
Soluzione
Ecco una possibilità: la differenza tra le macchine funzionanti e quelle non funzionanti è a 32 bit e 64 bit? Stai costruendo per " Qualsiasi CPU " ;, quando dovresti creare solo per il testimone della tua DLL esterna?
Altri suggerimenti
È possibile che le macchine che generano l'eccezione eseguano una versione a 64 bit di Windows e che il programma stia utilizzando la configurazione AnyCPU. La DLL System.Data.SQLite è una bestia a due facce: una parte gestita e una parte nativa. È possibile che la parte nativa sia responsabile dell'eccezione.
Vedi questa domanda per maggiori informazioni.
Hai verificato se il sistema di destinazione è a 64 o 32 bit?
È possibile che una delle tue dipendenze richieda una versione di Windows a 32 bit. Per risolvere il problema, puoi specificare un target piattaforma nelle proprietà del tuo progetto C #: Scegli x86 invece di Qualsiasi CPU.