web-dev-qa-db-fra.com

Incapable de charger DLL sqlite3 dans l'application Windows universelle fonctionnant sur mobile

Je développe un UWP. J'utilise la bibliothèque sqlite-net-pcl. Après la mise à niveau de mon application depuis RC vers RTM, une erreur d'exécution s'est produite. Impossible de trouver sqlite3.dll, si elle s'exécute sur un émulateur Mobile ou un périphérique. Cela fonctionnait parfaitement après avoir ajouté une référence à C++ 2013 Runtime Package et je l'ai exécuté dans l'ordinateur local.

Message d'exception:

Message "L'initialiseur de type pour 'SQLitePCL.raw' a généré une exception " chaîne

Le message innerexception:

{"Impossible de charger DLL 'sqlite3': le module spécifié n'a pas pu être Trouvé. (Exception de HRESULT: 0x8007007E)"} System.Exception {System.DllNotFoundException}

Bien sûr, je ne pouvais pas ajouter de référence à 'Sqlite for Universal App Platform' car j'obtiens l'erreur suivante.

Code de gravité Description Erreur de ligne de fichier projet La charge utile contient deux fichiers ou plus avec le même chemin de destination 'sqlite3.dll'. La source fichiers: C:\Program Files (x86)\Microsoft SDK\UAP\v0.8.0.0\ExtensionSDKs\SQLite.UAP.2015\3.8.11.1\Redist\Debug\ARM\sqlite3.dll C:\Users\sMavrikis.nuget\packages\SQLitePCL.raw_basic\0.7.1\build\native\sqlite3_dynamic\winrt81\arm\sqlite3.dll TestApp1

15
Stam

Ajoutez une référence à 'SQLite for Universal App Platform' Cela déclenchera l'erreur:

Payload contient deux fichiers ou plus avec le même chemin de destination 'sqlite3.dll'.

Cette erreur se produit en raison d'une version différente de sqlite3.dll dans les deux emplacements marqués par l'erreur . Résolvez cette erreur en copiant simplement

C:\Program Files (x86)\SDK Microsoft\UAP\v0.8.0.0\ExtensionSDKs\SQLite.UAP.2015\3.8.11.1\Redist\Debug\ARM\sqlite3.dll

à

C:\Users \% USERNAME% \. Nuget\packages\SQLitePCL.raw_basic\0.7.1\build\native\sqlite3_dynamic\winrt81\arm\sqlite3.dll

écraser le fichier existant.

Reconstruisez votre projet. Il devrait compiler maintenant.

33
iftitaj

Si vous examinez les deux emplacements en conflit, l'un semble provenir d'une extension Microsoft plus officielle pour UWP, tandis que le second provient d'un package nuGet.

Lorsque j'ai rencontré cette erreur, j'avais besoin des fonctionnalités du paquet nuGet. J'ai donc décidé de la conserver et de supprimer l'autre référence. J'ai cliqué avec le bouton droit de la souris sur le projet dans l'explorateur de solutions, puis sur Add-> Reference, puis j'ai décoché la référence à SQLite. Semblait moins sujette à l’erreur que de copier le fichier d’un endroit à l’autre.

 enter image description here

9
user6457623

Je recevais les mêmes messages d'erreur. J'avais commencé par utiliser SQLite-PCL qui nécessitait également SQLite pour Universal App Platform comme référence. Plus tard, je suis passé à SQLite.Net-PCL. C'est à ce moment que j'ai eu ces erreurs. En cherchant une solution, j'ai trouvé cette page. Cela a fonctionné un peu. Finalement, j'ai supprimé la référence à SQLite pour Universal App Platform et les erreurs ont disparu.

2
Will Autio

J'ai corrigé un problème similaire en sélectionnant x64 ou arm dans la configuration du compilateur.

Error Payload contient deux fichiers ou plus avec le même chemin de destination 'e_sqlite3.dll'. Fichiers source: C:\Utilisateurs\xleon.nuget\packages\SQLitePCLRaw.lib.e_sqlite3.v140\1.1.0\runtimes\win10-arm\native\e_sqlite3.dll C:\Utilisateurs\xleon.nuget\packages\sqlitepclraw.lib.e_sqlite3.v140\1.1.0\runtimes\win10-x86\native\e_sqlite3.dll

mais ceci, bien sûr, ne vous permettra pas d'exécuter l'émulateur

0
xleon

réponse tardive, mais avait le problème maintenant; Ce qui a été résolu pour moi, c’était de mettre à jour le package Nuget sur l’ensemble du projet de la solution, car l’un des packages utilisait toujours l’ancienne référence et suivait le projet Running en référence à l’autre projet périmé. 

0
Heinrich

Cliquez avec le bouton droit sur le projet UWP et choisissez Propriétés.

Et assurez-vous que la cible Solution Platform correspond à la cible Project Platform.

Si elles sont différentes, vous obtiendrez l'erreur de construction concernant la copie de fichiers vers la même destination avec le même nom (mais avec des plates-formes cibles différentes).

 Ensure matching target platforms

0
Kwame

J'ai réussi à résoudre la disparité en mettant une condition dans le fichier .csproj de UWP pour inclure la dll SQLite

<SDKReference Include="SQLite.UWP.2015, Version=3.19.3" Condition="'$(Configuration)'=='Debug'">
  <Name>SQLite for Universal Windows Platform</Name>
</SDKReference>

J'avais besoin de la version UWP pour le débogage, sinon mon concepteur XAMl exploserait avec "Impossible de trouver SQLite.dll ..."

0
sk4tec