2017-03-20 1 views
0

J'ai une solution multi-projets (C#) que j'essaie de déployer sur l'un de nos serveurs de test. Tous les projets sont en cours de construction pour x64, avec le "Préférez 32 bits" désactivé le cas échéant.Impossible de charger la DLL 'SQLite.Interop.dll': Le module spécifié est introuvable. Erreur sur Windows Server 2012

Certains projets font référence à un jeu de dll SQLite qui utilise l'extension SQLite Encryption (non gérée par nuget). Lorsque je compile et installe la solution sur ma machine de développement locale, l'application et le service Windows peuvent fonctionner correctement, sans problème. Lorsque j'essaie d'installer le même package sur l'un de nos serveurs de test, en exécutant Windows Server 2012 64 bits, je reçois le message "Impossible de charger la DLL 'SQLite.Interop.dll': Le module spécifié est introuvable " chaque fois que j'essaie de communiquer avec la base de données SQLite. J'ai triplé que toutes les DLL appropriées sont dans le dossier du programme après l'installation.

Dans ma solution VS, j'ai essayé de créer les dossiers x86/x64, en réglant Copier sur Toujours, mais en vain. J'ai également copié les DLL de mon dossier d'installation local dans le dossier du serveur juste pour voir si quelque chose a été foiré en cours de route.

Pourrait-il y avoir un problème de permissions? Je suis un utilisateur surélevé mais pas un administrateur complet sur le serveur, alors que je suis un administrateur complet sur ma machine. J'ai essayé de modifier manuellement les permissions sur le dossier de programme pour voir si c'était un problème, mais n'ai eu aucune chance avec cela non plus. Donc, pour résumer, le projet est explicitement construit pour x64, il a les bonnes DLL dans les bons dossiers, et il fonctionne sur une installation locale. Je ne sais pas pourquoi cela ne fonctionnera pas sur l'installation du serveur. J'ai parcouru d'innombrables discussions sur StackOverflow, MSDN et le site Web de SQLite, suggérant généralement les dossiers x86/x64, mais cela n'a pas fonctionné pour moi. J'espère que quelqu'un peut m'aider ici.

Merci!

Répondre

0

Était réellement capable de comprendre après un peu plus de débogage. L'environnement d'exécution Visual C++ installé sur le serveur n'était pas la bonne version. J'ai ajouté le Module de fusion au programme d'installation pour la version attendue par mon projet, j'ai réinstallé l'application sur le serveur, et maintenant cela fonctionne parfaitement.

Pour ceux qui ont ce problème, recherchez la bonne version de l'environnement d'exécution VC++ dans C: \ Program Files (x86) \ Fichiers communs \ Modules de fusion. Si vous ne savez pas de quelle version vous avez besoin, utilisez quelque chose comme "Dependency Walker" sur la machine qui lance l'erreur. Le mien m'a dit que je manquais VC140, donc c'est le module que j'ai copié dans mon projet et ajouté à l'installateur.