2009-10-25 16 views
6

Escribí una aplicación que usa sqlite y funciona muy bien en más de los sistemas. Está escrito en C#, y el único conjunto que no es framework es sqlite, que es incluido por System.Data.SQLite.dll.En algunas computadoras la aplicación no puede cargar el archivo sqlite dll

Lo despliego de la misma manera en todas las máquinas (copia pegando 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.

embargo, los informes entonces que tengo que para algunas personas que desencadena la siguiente excepción:

No se pudo cargar el archivo o ensamblado 'System.Data.SQLite, versión = 1.0.65.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139 'o una de sus dependencias. Se realizó un intento para cargar un programa con un 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 el mismo 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 nueva máquina virtual, instalé el profesional de Windows 7 en ella, y solo copié los archivos pegados, y funcionó. Entonces, si funciona en una ventana nueva, no me puedo imaginar lo que las otras PC podrían faltar ...

Nota: Dos de esas máquinas donde el proyecto arroja la excepción también están ejecutando Windows 7 proffesional.

Realmente agradecería cualquier ayuda en esto, porque estoy recién salido de las ideas ...

Respuesta

12

Aquí hay una posibilidad: ¿Es la diferencia entre las máquinas de trabajo y no-trabajo de 32 bits vs 64 ¿poco? ¿Estás construyendo para "Cualquier CPU", cuando deberías construir solo para la bitidez de tu DLL externo?

+0

¡Gracias! Totalmente olvidado que sqlite.NET tiene dos archivos dll diferentes: para x32 y x64. Cambié dll en las máquinas en las que no funcionaba y funciona ahora. Nunca pensé en preguntarles acerca de 32 vs 64 bit ... –

+0

¿Hay alguna manera de comprobar en tiempo de ejecución si la plataforma es de 32/64 bits y actuar en consecuencia en este caso? – Ben

+0

@Ben: me temo que no sé. Tendría que cargar dinámicamente la DLL sqlite correcta en el tiempo de ejecución, pero no sé cómo hacer eso en .net. – RichieHindle

1

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 AnyCPU. La DLL System.Data.SQLite es una bestia de dos caras: una parte administrada y una parte nativa. Podría ser que la parte nativa sea responsable de la excepción.

Ver this question para obtener más información.

1

¿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 32 bits de Windows. Para resolver el problema, puede especificar un objetivo de plataforma en las propiedades de su proyecto C#: elija x86 en lugar de cualquier CPU.

Cuestiones relacionadas