Nueva SQLite mixto asambleas

Anteriormente .NET SQLite bibliotecas estaban disponibles desde http://sqlite.phxsoftware.com, pero recientemente han sido tomadas por los principales SQLite equipo y se han movido Sistema.De datos.SQLite Página De Descarga. Los nuevos paquetes no parecen contener mixto asambleas más (solo ensamblado que contiene sqlite3.dll y el .NETA envoltura).

El nuevo paquete viene con el .NET DLL y SQLite.Interop.dll que se basa en la documentación no es necesaria en el escritorio, pero mi aplicación no carga con Unable to load DLL 'SQLite.Interop.DLL': The specified module could not be found.. He tratado de ejecutar la aplicación en IIS/IIS Express con apppool conjunto de 32-bit.

He tratado de copiar el SQLite.Interop.dll archivo en el bin carpeta, la carpeta del sistema, y la ASP.NET carpeta temp, pero sigue apareciendo el mismo error.

Hay mixto asambleas para las nuevas versiones disponibles en cualquier lugar? Si no, hay una forma de arreglar el Unable to load DLL 'SQLite.Interop.DLL error?

  • Está usted en una máquina de 64 bits?
  • Sí, eso dijo, yo no puedo cambiar a x64 asambleas para sqlite como tengo el mismo paquete de trabajar tanto de 32 como de 64 bits.
InformationsquelleAutor kay.one | 2011-06-01

4 Kommentare

  1. 24

    La página de descargas ahora contiene «modo mixto» descargas para todas las variaciones de Sistema.De datos.SQLite, que funcionan de la misma manera que en versiones anteriores de SQLite es decir, no hay requisito de incluir también SQLite.Interop.dll en su proyecto.

    El truco es – busque la palabra «paquete» en los enlaces de descarga

    por ejemplo, sqlite-netFx35-setup-paquete-x86-2008-1.0.76.0.exe

    También verá que el texto de la descripción de estos enlaces comienza con «Este paquete de instalación de las características de la modalidad mixta de la asamblea».

    Me queme porque no me doy cuenta de que que esto significa en realidad «descargar esto si usted quiere que funcione de la manera que siempre lo hacía antes».

    No tener ni idea de lo que significaba en modo mixto de la asamblea, los otros enlaces que parecía una mejor opción porque dicen «Este paquete de instalación va a instalar todos los componentes en tiempo de ejecución y dependencias».

    También tenga en cuenta que la única manera de saber si ha llegado el «mal» uno es por el tamaño del archivo. Los archivos Dll tener exactamente el mismo nombre, y exactamente el mismo número de versión. El modo mixto versión es mucho más grande – alrededor de 700K. El otro es de alrededor de 160 kb.

    Qué lío…

    • Por alguna razón, parecen desalentar el uso del paquete de los paquetes, aunque: «Estos paquetes sólo debe utilizarse en casos en que la asamblea binario se debe implementar en la Caché de ensamblados Global por alguna razón (por ejemplo, para el apoyo de aplicaciones heredadas por los clientes de máquinas)»
    • Parece que han añadido una nueva característica desde que escribí mi respuesta – «biblioteca nativa de pre-carga…a partir de la versión 1.0.80.0». Pero no es del todo claro para mí por qué esto es mejor, o por qué lo que solía ser una simple base de datos DLL se ha vuelto tan complicado.
    • además ganó el de «qué desastre»
    • Tuve específicamente para conseguir la Interoperabilidad DLL desde el binario en un archivo zip. Cuando comencé a utilizar la DLL de Interoperabilidad en la distribución binaria, era una vela siguiendo la recomendación aquí: stackoverflow.com/a/19123510/1686511
  2. 18

    He encontrado la solución. El problema era debido a un problema conocido con SQLite.Interop.dll.

    Esta es la solución de que trabajó para mí.

    Utilizando Dependency Walker de
    http://dependencywalker.com/ a buscar
    en SQLite.Interop.dll (x86 y x64)
    muestra de los que depende MSVCR100.dll.

    El viejo 1.0.66.0 versión de
    Sistema.Data.SQLite.dll no tiene
    esta dependencia. Con la actual
    construir, habría que redistribuir
    que MSVCR100.dll también o ejecutar una
    instalador de Microsoft.

    Solución: A Partir De:
    Falta msvcr100.dll

    Uso vinculación estática. En el
    SQLite.Interoperabilidad de proyecto de Visual Studio.
    Ir a esta configuración de Propiedades del Proyecto
    -> Propiedades -> Propiedades de Configuración -> C/C++ -> Generación de Código
    -> Biblioteca de tiempo de ejecución y cambiar el valor a la Multi-threaded (/MT). (El
    de código fuente actual (1.0.71.0) ha
    DLL multiproceso (/MD), lo que causa
    la dll a confiar en MSVCR100.dll y
    el DLLImport (y LoadLibary()) para
    fallar cuando los usuarios no la tiene).

    Creo que la vinculación estática debe ser
    cambiado por lo que es el valor predeterminado para
    SQLite.Interop.dll.

    • Vale la pena destacar también que si la reconstrucción no es una opción, entonces el MSVC 2010 runtime (x86) puede descargarse de microsoft.com/download/en/confirmation.aspx?id=5555 … hay casi seguramente será una versión de 64 bits también.
    • Yo estoy luchando con esto ahora mismo. Si he entendido bien, parece que hemos perdido una de las cosas buenas acerca de SQLite – un solo archivo DLL implementación. Si es así, eso es una mierda…
    • Si no se utiliza la estática del paquete, asegúrese de que usted tiene el VC++ runtime (support.microsoft.com/kb/2019667). Si el error persiste, asegúrese de que SQLite.Interop.DLL está en el mismo directorio como System.Data.SQLite.dll o VS no ser capaz de encontrar este segundo archivo.
  3. 8

    Tuve el mismo problema, en un plugin para una aplicación diferente. En mi caso lo resuelto por la modificación de la variable de entorno PreLoadSQLite_BaseDirectory antes de hacer referencia a SQLite por primera vez.

    //Make SQLite work... (loading dll from e.g. x64/SQLite.Interop.dll)
    System.Environment.SetEnvironmentVariable("PreLoadSQLite_BaseDirectory", System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location));
    
    Sql.Data.SQLite...

    No veo por qué esto era necesario, aunque, como yo pensaba PreLoadSQLite_BaseDirectory (bueno, la correspondiente variable interna) de manera predeterminada a la ubicación de la System.Data.SQLite.dll archivo.

    • El enlace está roto, que creo que significa esta solución no funciona.
  4. 4

    En máquinas de 64 bits y un AnyCPU específica .NETO de la aplicación no se puede cargar la DLL de 32 bits de los archivos. Es probable que necesite para establecer la plataforma de destino de su .NETO de aplicación a x86 en orden para que funcione en ambos de 64 bits y 32 bits máquinas.

    Editar: bajo la capucha de la razón por la que no se puede cargar la DLL de Interoperabilidad es, probablemente debido a un BadImageFormatException debido a los bits de desajuste con el nativo de SQLite archivo DLL.

    • mi aplicación está dirigida a x86, y cuando me miro en el administrador de tareas el proceso tiene un * delante lo que significa que se está ejecutando en WOW (supongo)
    • A continuación, el SQLite Interop DLL NO está dirigida a x86 y en su lugar se AnyCPU.
    • Hay una herramienta que me diga el destino de una asamblea?
    • He descargado el x86 SQLite de su enlace. Creó un nuevo x86 C# proyecto de Consola. Añadido System.Data.SQLite.dll como referencia. Entonces agregué SQLite.Interop.dll como un elemento existente para mi proyecto. Hizo Contenido (Copiar si es posterior). Se ejecuta sin excepción, en mi Win7 de 64 bits de la máquina como un programa de 32 bits. También se ejecuta en el equipo con XP de 32 bits. Si puedo hacer que el Proyecto de Consola AnyCPU se produce un error.
    • asegúrese de que puede utilizar corflags.exe <assembly>(msdn.microsoft.com/en-us/library/ms164699.aspx) para inspeccionar el objetivo.
    • Estoy en realidad se ejecuta en IIS/IISExpress, pero tengo el apppool conjunto de 32 bits.
    • En caso de estar interesado, el código fuente para la aplicación en cuestión está disponible en github.com/kayone/NzbDrone
    • AppPool, hmm, ha llegado más allá de mi experiencia. Va a volver a etiquetar a tu pregunta.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein