2013-08-12 4 views
11

(Ceci est une question dupliquée qui a été posée dans stackoverflow.com J'ai lu les réponses J'ai essayé les solutions, mais cela n'a pas résolu mon problème, je vais expliquer mon problème et ce que j'ai fait).System.IO.FileLoadException: Impossible de charger le fichier ou l'assembly 'System.Data.SQLite

Ceci est mon problème:

Mon application utilisée System.Data.SQLite.DLL. Je l'ai référencé et fonctionne normalement sur mon ordinateur, mais il n'a pas fonctionné sur un autre ordinateur. Tel est le message d'erreur:

System.IO.FileLoadException: Could not load file or assembly 'System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139' or one of its dependencies. The application has failed to start because its side-by-side
configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail.
(Exception from HRESULT: 0x800736B1) File name: 'System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139' ---> System.Runtime.InteropServices.COMException (0x800736B1): The application has failed to start because its side-by-side
configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail.
(Exception from HRESULT: 0x800736B1) at SimPB.config.PrepareDatabase() at SimPB.config.InitializeProgram() at SimPB.Program.Main()

Mon ordinateur fonctionne sous Windows 7 32 bits, Visual Studio 2010.

Un autre ordinateur fonctionne sous Windows 7 32 bits aussi, sans Visual Studio installé.

Ce que j'ai essayé:

Tentative 1: Assurez-vous que l'application est construite avec sortie + x86 et l'application est construite avec le cadre cible: .NET Framework 2.0. Terminé.

Tentative 2: Assurez-vous que l'application fait référence à la construction correcte de System.Data.SQLite, qui est x86 + Net Framework 2.0 (sqlite-netFx20-Win32-2005-1.0.88.0-binaire). Fait

Tentative 3: Essayez ces codes à App.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
    <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration> 

et ce

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
    <supportedRuntime version="v2.0.50727"/> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 
    <runtime> 
    <NetFx40_LegacySecurityPolicy enabled="true"/> 
    </runtime> 
</configuration> 

et ce

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration> 

Terminé.

Tentative 4: Essayez de désactiver le contrôle de compte d'utilisateur sur un autre ordinateur. Terminé. Essayez d'installer Visual C++ Runtime sur un autre ordinateur (j'installe le package redistribuable Visual Microsoft Visual C++ Runtime 2010 (x86), également essayé 2005 version.). Terminé.

Tentative 6: Essayez de réinstaller .NET Framework 2.0 SP2. Erreur de réception:

You must use "Turn Windows Features On or Off" in the Control Panel to install or configure Microsoft .NET Framework 2.0 SP2.

Mise à jour: (Après avoir lu les réponses et commentaires)
Tentative 7: Assurez-vous System.Data.SQLite.DLL est situé dans le dossier du bac de sortie. Terminé

Tentative 8: Double confirmez que l'autre ordinateur exécute Windows NT 32 bits.Fait

tentative 9: Changer la déclaration HintPath dans .csproj:
Modifier ceci:

<Reference Include="System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86"> 
    <HintPath>E:\Developer Soft\SQLite\sqlite-netFx20-binary-bundle-Win32-2005-1.0.88.0\System.Data.SQLite.dll</HintPath> 
</Reference> 

à ceci:

<Reference Include="System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86"> 
    <HintPath>..\System.Data.SQLite.dll</HintPath> 
</Reference> 

fait pour tentative 9.

Après les tentatives ci-dessus, la res ult est toujours le même. L'application peut s'exécuter normalement à partir de mon ordinateur et ne pas s'exécuter sur un autre ordinateur.

Ceci est un logiciel gratuit open source, Simple Phone Book. Je me suis engagé et téléchargé le dernier code source de son serveur de contrôle de code source à:
http://simpb.codeplex.com/SourceControl/list/changesets (Changeset Numéro: fd847ac6c406)

+0

Vérifiez si cette dll (System.Data.SQLite.DLL) est copié et se présente dans votre dossier bin – Rex

+0

@Rex Oui, ça l'est. – mjb

+0

Etes-vous absolument certain que l'autre ordinateur ne fonctionne pas en 64 bits? – SWeko

Répondre

5

J'ai résolu le problème. Voici comment je résous:

histoire courte:
Utilisez la version plus ancienne de System.Data.SQLite. La nouvelle version est suspectée d'avoir des bugs (je peux me tromper).

longue histoire:
j'ai commencé à rappeler de nouveau pourquoi ma précédente ancienne version de ce programme peut être exécuté sur un autre ordinateur et cette nouvelle version ne peut pas. Quels sont les changements évidents que j'ai faits?

Oui, j'ai changé la version de System.Data.SQLite. L'ancienne version de System.Data.SQLite utilisée par ce programme est V1.0.66. La nouvelle version que j'ai utilisée est la dernière version: V1.0.88, publiée le le 8 août 2013. (Oui, qui est d'environ il ya 4 jours à partir de aujourd'hui). Lire la suite: http://system.data.sqlite.org/index.html/timeline

Ensuite, j'ai décidé d'abandonner la nouvelle version (V1.0.88) et utilisé l'ancienne version (V1.0.66), et tout est redevenu normal. Le programme est de nouveau exécutable sur un autre ordinateur.

J'ai essayé de jeter un oeil au code source de V1.0.88, mais j'ai échoué à localiser les lignes de code qui provoque le problème. Le meilleur que je peux découvrir est au projet de System.Data.SQLite.Interop.Lorsque je charge la solution dans Visual Studio 2010, System.Data.SQLite.Interop est prédéfini pour générer .NET Framework 4.0. Je ne sais pas comment le changer. Plus tard, je recharge la solution dans Visual Studio 2008, les propriétés communes de System.Data.SQLite.Interop montrant qu'il va construire pour .NET Framework 2.0 (ce que je recherche), mais j'échoue pour construire la solution. Certaines erreurs de construction se produisent. Je n'ai pas passé le temps de le déboguer.

J'ai besoin de développer le programme pour .NET Framework 2.0, car certains utilisateurs utilisent encore Windows XP.

Je suppose que V1.0.88 contient des bogues, mais je pourrais me tromper. Quoi qu'il en soit, comme pour la solution actuelle, je tiens à V1.0.66.

4

L'assemblée ne peut se trouver en raison d'une déclaration de HintPath dans your .csproj file:

<Reference Include="System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86"> 
    <HintPath>E:\Developer Soft\SQLite\sqlite-netFx20-binary-bundle-Win32-2005-1.0.88.0\System.Data.SQLite.dll</HintPath> 
</Reference> 

Il fonctionne sur votre machine, parce que vous avez vraiment le fichier .dll à cet endroit. Cependant, l'autre personne peut vouloir utiliser le fichier System.Data.SQLite.dll que vous avez placé à la racine du référentiel. Puisque c'est d'un niveau de la .csproj, vous pouvez utiliser un chemin relatif, comme celui-ci:

<Reference Include="System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86"> 
    <HintPath>..\System.Data.SQLite.dll</HintPath> 
</Reference> 

et il devrait fonctionner correctement.

+1

+1 props pour réellement dl'ing son code. – Mithon

+0

Salut, j'ai essayé votre suggestion. mais le problème reste toujours. Cependant, j'ai résolu le problème. J'ai répondu à la question moi-même. Merci pour votre aide de toute façon :) bonne chance – mjb

1

J'ai également eu des problèmes avec SQLite depuis v1.0.66 dans les machines x64/x86. Je n'ai jamais été capable d'installer ServiceStack puis SqLite.x86 avec le paquet nuget et de le faire fonctionner hors de la boîte.

Mais aujourd'hui j'ai changé le processus d'installation avec succès, et ce pourrait être aussi une solution pour vous. Je soupçonne que le problème est toujours que la version de System.Data.SQlite n'est pas alignée avec celle que Servicestack.Ormlite.SqliteNET attend.

Le processus suivant dans la console Nuget fait les choses pour moi:

Install-Package System.Data.Sqlite.x86 -Version 1.0.88.0 
Install-Package ServiceStack -Version 3.9.71 
Install-Package ServiceStack.OrmLite.Sqlite32 -Version 3.9.71 
0

Vérifiez si MS Visual C++ en cours d'exécution redistribuable installer, comme System.Data.SQLite est en dépendent.

1

Dans votre fichier App.config, ajoutez ces lignes à l'intérieur de l'élément <configuration>:
<runtime> <loadFromRemoteSources enabled="true"/> </runtime>

Questions connexes