Pregunta

Escribí una aplicación que usa sqlite y funciona muy bien en la mayoría de los sistemas. Está escrito en C #, y el único conjunto que no es de marco es sqlite, que está incluido en System.Data.SQLite.dll.

Lo implemento de la misma manera en todas las máquinas (copie y pegue el archivo exe, el archivo de base de datos y el archivo System.Data.SQLite). Funciona muy bien para todas mis PC y la mayoría de las PC que he probado.

Pero luego tengo informes de que para algunas personas se produce la siguiente excepción:

  

No se pudo cargar el archivo o el ensamblaje   'System.Data.SQLite, Version = 1.0.65.0,   Cultura = neutral,   PublicKeyToken = db937bc2d44ff139 'o   Una de sus dependencias. Un intento   fue hecho para cargar un programa con una   formato incorrecto.

Ahora me he asegurado de que el archivo dll esté en la misma carpeta que el archivo exe de la aplicación. Es la misma DLL, con la misma versión que se indica en el mensaje de excepción anterior.

Estaba realmente confundido por esto, así que creé una máquina virtual nueva, instalé Windows 7 Professional en ella, y simplemente copié los archivos, y funcionó. Entonces, si funciona en una ventana nueva, no puedo imaginar lo que podrían faltar las otras PC ...

Nota: dos de esas máquinas en las que el proyecto arroja la excepción también ejecutan Windows 7 proffesional.

Realmente agradecería cualquier ayuda con esto, porque estoy sin ideas ...

¿Fue útil?

Solución

Aquí hay una posibilidad: ¿la diferencia entre las máquinas que funcionan y las que no funcionan es de 32 bits en lugar de 64 bits? ¿Está compilando para " Cualquier CPU " ;, cuando debería estar compilando solo para el bitness de su DLL externo?

Otros consejos

Es posible que las máquinas que lanzan la excepción ejecuten una versión de Windows de 64 bits y que su programa esté utilizando la configuración de AnyCPU. La DLL System.Data.SQLite es una bestia de dos caras: una parte gestionada y una parte nativa. Podría ser que la parte nativa sea responsable de la excepción.

Consulte esta pregunta para obtener más información.

¿Ha comprobado si el sistema de destino es de 64 bits o de 32 bits?

Puede ser que una de sus dependencias requiera una versión de Windows de 32 bits. Para resolver el problema, puede especificar un objetivo de plataforma en las propiedades de su proyecto de C #: elija x86 en lugar de Cualquier CPU.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top