web-dev-qa-db-fra.com

Visual Studio C # - SQLite.Interop.dll introuvable

J'essaie actuellement de créer avec Visual Studio une application C # utilisant SQLite. J'ai installé SQLite pour mon programme avec NuGet et trois références sont apparues dans l'explorateur de solutions (System.Data.SQLite, System.Data.SQLite.EF6, System.Data.SQLite.Linq).

Lorsque j'exécute mon application dans VS, tout fonctionne correctement. Cependant, chaque fois que je le publie (avec ClickOnce) et que j'essaie d'exécuter l'application, il se bloque avec l'erreur suivante: System.DllNotFoundException: Impossible de charger DLL 'SQLite.Interop.dll': module spécifié introuvable (exception de HRESULT: 0x8007007E)

Après quelques recherches, j'ai trouvé cette dll dans le dossier Debug et je l'ai copiée dans le dossier où la version ".exe" de mon programme est créée (après la publication et l'exécution de "setup.exe"). De cette façon, l'application fonctionne bien.

Mais je ne suis pas vraiment satisfait de cette solution, car elle semble vraiment sale. Je ne veux pas que les futurs utilisateurs soient obligés de le faire manuellement lorsqu'ils installent mon application!

Par conséquent, ma question est la suivante: que puis-je faire pour m'assurer que cette dll est installée avec mon programme?

Remarque: j'ai essayé la première réponse de ce message: incapable de charger dll sqlite interop dll WPF Mais je ne semblais pas fonctionner pour moi.

Merci !

5
Daneel

Voir Utilisation du préchargement de la bibliothèque native à https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

Vous devrez probablement inclure les dossiers x86 et x64 sous l'autre DLL SQLite.

6
topshot

J'ai également rencontré le problème similaire dans mon environnement de Visual Studio 2017 et de NET Framework 4.5:

Je développe un Outlook Add Ins en utilisant ClickOnce pour le publier et SQLite en tant que base de données. Après avoir installé la bibliothèque SQLite dans le projet à partir de NuGet, celle-ci fonctionne parfaitement dans l'environnement local, mais affiche le message d'erreur d'exception "Impossible de charger DLL 'SQLite.Interop.dll'" sur l'ordinateur client.

J'ai comparé les deux environnements et découvert que le fichier DLL 'SQLite.Interop.dll' n'avait pas été publié sur la machine cliente, comme l'indique le graphique suivant .  enter image description here

J'ai cherché 'SQLite.Interop.dll' dans l'environnement local et je l'ai trouvé sauvegardé dans le dossier suivant "{projet}\packages\System.Data.SQLite.Core.1.0.105.2\build \" pour le .NET FrameWork spécifique  enter image description here

Ainsi, ma solution consiste à ajouter ces deux DLL bibliothèques au projet. Elles peuvent ensuite être publiées sur la machine cliente à l'aide de ClickOnce. enter image description here

(Remarque: la version DLL sélectionnée doit être identique à la version NET Framework de votre environnement.)

5
ukalpa

Par défaut, la DLL sqlite.interop.dll n'est pas fournie avec l'installation de SQLite par NuGet. Pour résoudre ce problème, vous devez ajouter les dll, x86 et x64 . Sur le site Web de SQLite, téléchargez le pack contenant les dll nécessaires. Installez-les dans le client ou copiez ces DLL dans votre projet avant de les distribuer.

5
Rafael

S'il s'agit d'un fichier installable. c'est-à-dire que si vous créez un fichier d'installation, vous devez ajouter la DLL manuellement au fichier de sortie principal. 

Accédez aux propriétés du projet d'installation et aux paramètres de configuration, sélectionnez les conditions préalables SQLLite, cochez (Case à cocher), installez-le à partir de l'emplacement du projet.

Voyez si cela résout votre problème.

0
Prabhanjan_13

"Remarque: j'ai essayé la première réponse de ce message: impossible de charger dll sqlite interop dll WPF mais je ne semblais pas fonctionner pour moi."

J'ai essayé ça aussi et je l'ai finalement fait fonctionner. Cependant, l’important est:

  1. Insérez sqlite.interop.dll en tant qu'élément existant dans la racine du projet que vous allez générer.
  2. Dans les propriétés de ce fichier, assurez-vous que son traitement de génération est "contenu" (pas la ressource incorporée comme suggéré) et, bien sûr, toujours copié dans le répertoire de sortie.

J'espère que cela aidera à vaincre cet insecte ennuyeux.

0
mitch182