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 ...

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top