Quand vous vous retrouvez dans cet état, essayez d'effectuer un Rebuild-All. Si cela résout le problème, vous avez peut-être le même problème que moi.
Un peu de contexte (ma compréhension) :
-
SQLite possède un assemblage géré (System.Data.SQLite.dll) et plusieurs assemblages spécifiques à une assemblages spécifiques à la plate-forme (SQLite.Interop.dll). Lors de l'installation de SQLite avec Nuget, ce dernier ajoutera les assemblages spécifiques à la plate-forme à votre projet (dans plusieurs dossiers : SQLite.Interop.dll). (dans plusieurs dossiers : \x86 , \x64 ), et configure ces dlls à "Copier toujours".
-
Lors du chargement, l'assemblage géré recherchera la plateforme à l'intérieur du répertoire \x86 y \x64 dossiers. Vous pouvez voir plus à ce sujet aquí . L'exception est cette assemblée gérée l'exception de cet ensemble géré qui tente de trouver le fichier pertinent (SQLite.Interop.dll) dans ces ces dossiers (et échoue).
Mon scénario :
J'ai deux projets dans ma solution : une application WPF et une bibliothèque de classes. L'application WPF fait référence à la bibliothèque de classes, et la bibliothèque de classes fait référence à SQLite (installé via Nuget).
Le problème pour moi est que lorsque je modifie uniquement l'application WPF, VS tente de faire une reconstruction partielle (en réalisant que la dll dépendante n'a pas changé). Quelque part dans ce processus, VS nettoie le contenu du fichier \x86 y \x64 (en supprimant SQLite.Interop.dll). Lorsque je fais un Rebuild-All complet, VS copie les dossiers et leur contenu correctement.
Ma solution :
Pour résoudre ce problème, j'ai fini par ajouter un processus Post-Build utilisant xcopy pour forcer la copie du fichier \x86 y \x64 des dossiers de la bibliothèque de classes à mon projet WPF \bin répertoire.
Sinon, vous pouvez faire des choses plus sophistiquées avec la configuration de la construction / les répertoires de sortie.
2 votes
Oui, c'est réglé pour copier toujours. J'ai des dossiers x64 et x86 dans bin/debug. Et ça marche la plupart du temps, mais parfois ça ne marche plus. Il est probable que quelque chose bloque l'accès à la dll, je vais essayer de le découvrir la prochaine fois qu'il s'arrête de fonctionner. Comme je l'ai dit, il peut fonctionner plusieurs jours sans problème.
19 votes
J'ai obtenu cette erreur dès la sortie de la boîte après avoir ajouté le paquet SQLite nuget à un nouveau projet de console. En copiant manuellement SQLite.Interop.dll du dossier x86 vers le haut d'un niveau, l'application peut fonctionner. Il me semble étrange que ce problème soit si grave.
0 votes
@Wayne Oui, cela aide vraiment. Mais dans mon cas, nous travaillons ensemble sur le projet, et mon ami utilise un système d'exploitation x86, tandis que moi x64. Et comme je l'ai remarqué, il s'arrête de fonctionner parfois. Bien que cela ne me soit pas arrivé le mois dernier.
1 votes
Si vous téléchargez le binaire correct pour SQLite, copiez SQLite.Interop.dll dans votre dossier Release ou Debug selon l'option de construction de votre projet.
0 votes
Ce bogue est tellement aléatoire... parfois il se produit et parfois il ne se produit pas pour mon projet. J'ai tout essayé.
0 votes
J'ai rencontré plusieurs problèmes de ce type. La solution qui a fonctionné pour moi était d'utiliser la version liée statiquement de la bibliothèque.
0 votes
Pour moi, cela fonctionne sur run et sur debug, mais pas sur d:DesignInstance (wpf). J'ai réglé le problème en copiant la dll dans le répertoire du projet, mais après avoir redémarré, cela ne fonctionne plus. Je ne comprends pas.
0 votes
OK... je l'ai changé en x86 seulement - ça ne marche toujours pas. J'ai inversé le changement... ça marche !