Solución:
También encontré un problema similar en mi entorno de Visual Studio 2017 y NET Framework 4.5, la circunstancia es:
Estoy desarrollando un complemento de Outlook usando ClickOnce para publicarlo y SQLite como base de datos. Después de haber instalado la biblioteca SQLite en el proyecto de NuGet, funciona perfectamente en el entorno local, pero aparece el mensaje de error de excepción “No se puede cargar la DLL ‘SQLite.Interop.dll'” en la máquina cliente.
Comparé los dos entornos y encontré que el archivo DLL ‘SQLite.Interop.dll’ no se había publicado en la máquina cliente que podemos ver en el siguiente gráfico.
Busqué ‘SQLite.Interop.dll’ en el entorno local y encontré que está guardado en la siguiente carpeta “{proyecto} packages System.Data.SQLite.Core.1.0.105.2 build ” para el .Net FrameWork específico
Entonces, mi solución es agregar estas dos bibliotecas DLL al proyecto, luego se pueden publicar en la máquina cliente usando ClickOnce.
(Aviso: la versión de DLL seleccionada debe ser la misma que la versión de NET Framework en su entorno).
Ver Uso de la precarga de la biblioteca nativa en https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
Es probable que deba incluir las carpetas x86 y x64 en la otra DLL de SQLite.
Editar: He agregado la información relevante a continuación en caso de que el enlace anterior muera / cambie.
Si las máquinas de desarrollo y del cliente pueden tener diferentes arquitecturas de procesador, es posible que se requiera más de un paquete binario. Para esta situación, se recomienda encarecidamente utilizar la función de carga previa de la biblioteca nativa. Está disponible a partir de la versión 1.0.80.0 y habilitado de forma predeterminada. Para aprovechar esta característica, los ensamblados administrados y de interoperabilidad separados deben usarse con la implementación de XCOPY (es decir, esta característica no es compatible con el ensamblado de modo mixto, ni cuando el ensamblado se implementa en la caché de ensamblados global), lo que da como resultado una implementación de aplicación que se parece a esto:
- bin App.exe (ensamblado ejecutable de la aplicación solo administrada opcional)
- bin App.dll (ensamblado de biblioteca de aplicaciones solo administrado opcional)
- bin System.Data.SQLite.dll (requerido, ensamblado de núcleo solo administrado)
- bin System.Data.SQLite.Linq.dll (ensamblado LINQ opcional solo administrado)
- bin System.Data.SQLite.EF6.dll (ensamblado EF6 opcional, solo administrado)
- bin x86 SQLite.Interop.dll (requerido, ensamblado de interoperabilidad nativo x86)
- bin x64 SQLite.Interop.dll (requerido, ensamblado de interoperabilidad nativo x64)
La cadena “bin” anterior representa el directorio donde se implementarán los binarios de la aplicación en la máquina de destino. Con la función de precarga de la biblioteca nativa habilitada y la implementación de la aplicación que se muestra arriba, el ensamblado solo administrado System.Data.SQLite intentará detectar automáticamente la arquitectura del procesador del proceso actual y precargar la biblioteca nativa apropiada.
De forma predeterminada, el dll sqlite.interop.dll no viene con la instalación de NuGet de SQLite. Para resolver esto, debe agregar los dlls, x86 y x64. En el sitio web de SQLite, descargue el paquete que contiene las DLL necesarias. Instálelos en el cliente o copie estos dlls en su proyecto antes de distribuirlos.