Question

J'ai écrit une application qui utilise SQLite et qui fonctionne très bien sur la plupart des systèmes. Il est écrit en C # et le seul assemblage non-framework est sqlite, inclus dans System.Data.SQLite.dll.

Je le déploie de la même manière sur toutes les machines (en copiant le fichier exe, le fichier de base de données et le fichier System.Data.SQLite). Cela fonctionne très bien pour tous mes ordinateurs et la plupart des ordinateurs que j'ai essayés.

Mais ensuite, des rapports indiquent que, pour certaines personnes, l'exception suivante est générée:

  

Impossible de charger le fichier ou l'assembly   'System.Data.SQLite, Version = 1.0.65.0,   Culture = neutre,   PublicKeyToken = db937bc2d44ff139 'ou   une de ses dépendances. Un essai   a été fait pour charger un programme avec un   format incorrect.

Maintenant, je me suis assuré que le fichier dll se trouve dans le même dossier que le fichier exe de l'application. C'est la même DLL, avec la même version que celle indiquée dans le message d'exception ci-dessus.

Cela me rendait vraiment perplexe. J'ai donc créé une nouvelle machine virtuelle, installé Windows 7 Professional sur celle-ci et copié-collé les fichiers. Le tout a fonctionné. Donc, si cela fonctionne sur une nouvelle fenêtre, je ne peux pas imaginer ce que les autres PC pourraient manquer ...

Remarque: Deux des machines sur lesquelles le projet lève l'exception exécutent également Windows 7 à titre professionnel.

J'apprécierais vraiment toute aide à ce sujet, car je n'ai plus d'idées ...

Était-ce utile?

La solution

Voici une possibilité: la différence entre les machines qui fonctionnent et celles qui ne travaillent pas est-elle 32 bits par rapport à 64 bits? Construisez-vous pour "Tous les processeurs", alors que vous devriez créer uniquement pour le bitness de votre DLL externe?

Autres conseils

Il est possible que les machines qui lèvent l'exception exécutent une version 64 bits de Windows et que votre programme utilise la configuration AnyCPU. La DLL System.Data.SQLite est une bête à deux faces: une partie gérée et une partie native. Il se peut que la partie native soit responsable de l'exception.

Consultez cette question pour plus d'informations.

Avez-vous vérifié si le système cible est 64 bits ou 32 bits?

Il se peut que l’une de vos dépendances nécessite une version 32 bits de Windows. Pour résoudre ce problème, vous pouvez spécifier une cible de plate-forme dans les propriétés de votre projet C #: choisissez x86 au lieu de Tout processeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top