2013-08-12 6 views
11

nicht laden (Dies ist eine doppelte Frage, die in stackoverflow.com gestellt wurde. Ich habe die Antworten gelesen. Ich habe die Lösungen ausprobiert, aber das hat mein Problem nicht gelöst, ich werde erklären, was mein Problem ist und was ich getan habe.System.IO.FileLoadException: Konnte Datei oder Assembly 'System.Data.SQLite

Das ist mein Problem:

Meine Anwendung verwendet System.Data.SQLite.DLL. Ich habe darauf verwiesen und normal auf meinem Computer ausgeführt, aber es konnte nicht auf einem anderen Computer ausgeführt werden. Dies ist die Fehlermeldung:

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()

Mein Computer läuft Windows 7 32 Bit, Visual Studio 2010

Ein weiterer Computer läuft Windows 7 32 Bit zu, ohne Visual Studio installiert.

Was ich versucht habe:

Versuch 1: Achten Sie darauf, die Anwendung erstellen ist mit Veröffentlichung + x86 und die Anwendung wird mit dem Zielrahmen bauen: .NET Framework 2.0. Erledigt.

Versuch 2: Vergewissern Sie sich, die Anwendung mit dem richtigen Build von System.Data.SQLite verwiesen, die x86 + .Net Framework 2.0 (SQLite-netFx20-Binär-Win32-2005-1.0.88.0) ist. Fertig

Versuch 3: Versuchen Sie diese Codes bei App.config:

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

und diese

<?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> 

und diese

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

Erledigt.

Versuch 4: Versuchen Sie, die Benutzerkontensteuerung auf dem anderen Computer auszuschalten. Erledigt.

Versuch 5: Versuchen Sie, Visual C++ Runtime auf dem anderen Computer zu installieren (ich installiere Visual Microsoft Visual C++ Runtime 2010 Redistributable Package (x86), auch versuchte 2005 Verson.). Erledigt.

Versuch 6: Versuchen Sie, .NET Framework 2.0 SP2 neu zu installieren. Empfangsfehler:

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

Aktualisiert: (Nach dem Lesen der Antworten und Kommentare)
Versuch 7: Stellen Sie sicher, System.Data.SQLite.DLL am Ausgabefach-Ordner befindet. Fertig

Versuch 8: Bestätigen Sie, dass auf dem anderen Computer 32-Bit-Windows 7 ausgeführt wird.Fertig

Versuch 9: die HintPath Erklärung in CSPROJ Datei ändern:
ändern diese:

<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> 

Um dies:

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

für Versuch getan 9.

Nach den obigen Versuchen, die res Ult ist immer noch das Gleiche. Die Anwendung kann normal von meinem Computer ausgeführt werden und konnte nicht auf dem anderen Computer ausgeführt werden.

Dies ist eine Open-Source-Freeware, Einfache Telefonbuch. Ich habe begangen und hochgeladen die neuesten Quellcode es Quellcodeverwaltung Server ist unter:
http://simpb.codeplex.com/SourceControl/list/changesets (Changeset-Nummer: fd847ac6c406)

+0

Überprüfen Sie, ob diese dll (System.Data.SQLite.DLL) wird immer in Ihrem Binärordner – Rex

+0

@Rex kopiert und Gegenwart Ja, so ist es. – mjb

+0

Sind Sie absolut sicher sicher, dass der andere Computer 64-Bit nicht ausführt? – SWeko

Antwort

5

Ich habe das Problem gelöst. Dies ist, wie ich lösen:

Kurzgeschichte:
Verwenden ältere Version von System.Data.SQLite. Neue Version hat vermutlich Bugs (ich könnte falsch liegen).

Lange Geschichte:
Ich begann meine vorherige alte Version dieses Programms zu erinnern zurück, warum die Lage ist, auf anderen Computern ausgeführt werden und diese neue Version nicht. Was sind die offensichtlichen Änderungen, die ich gemacht habe?

Ja, ich habe die Version von System.Data.SQLite geändert. Die alte Version von System.Data.SQLite, die von diesem Programm verwendet wird, ist V1.0.66. Die neue Version, die ich verwendet habe, ist die neueste Version: V1.0.88, veröffentlicht am 0 August 2013. (Ja, das ist etwa vor 4 Tagen von heute). Weiterlesen: http://system.data.sqlite.org/index.html/timeline

Dann entschied ich mich, die neue Version (V1.0.88) abondon und benutzte die alte Version (V1.0.66), und alles wieder normal. Das Programm ist erneut auf einem anderen Computer ausführbar.

Ich habe versucht, einen Blick auf den Quellcode von V1.0.88 zu werfen, aber ich konnte die Codezeilen nicht finden, die das Problem verursacht. Das Beste, was ich entdecken kann, ist das Projekt System.Data.SQLite.Interop.Wenn ich die Lösung in Visual Studio 2010 lade, ist System.Data.SQLite.Interop voreingestellt, um für .NET Framework 4.0 zu erstellen. Ich weiß nicht, wie ich es ändern soll. Später, ich lade die Lösung in Visual Studio 2008, die gemeinsamen Eigenschaften von System.Data.SQLite.Interop zeigen, dass es für .NET Framework 2.0 (was ist, was ich suchen werde) zu bauen, aber ich scheitere um die Lösung zu bauen. Einige Buildfehler treten auf. Ich habe nicht die Zeit verbracht, es zu debuggen.

Ich muss das Programm für .NET Framework 2.0 entwickeln, da es Benutzer gibt, die immer noch Windows XP verwenden.

Ich nehme an, dass V1.0.88 Bugs enthält, aber ich könnte falsch liegen. Wie auch immer, für die aktuelle Lösung bleibe ich einfach bei V1.0.66.

4

Die Baugruppe kann nicht aufgrund einer HintPath Erklärung in your .csproj file befinden:

<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> 

Es funktioniert auf Ihrem Computer, weil Sie wirklich die .dll an diesem Ort haben. Möglicherweise möchte die andere Person jedoch die Datei System.Data.SQLite.dll verwenden, die Sie im Stammverzeichnis des Repositorys abgelegt haben. Da, dass eine Ebene nach oben aus dem CSPROJ ist, können Sie einen relativen Pfad wie folgt verwenden:

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

und es sollte funktionieren.

+1

+1 Requisiten für die tatsächliche dl'ing seinen Code. – Mithon

+0

Hallo, ich habe deinen Vorschlag ausprobiert. aber das Problem bleibt immer noch bestehen. Ich habe das Problem jedoch gelöst. Ich habe die Frage selbst beantwortet. Danke dir trotzdem für deine Hilfe :) Viel Glück – mjb

1

Ich hatte auch Probleme mit SQLite seit v1.0.66 in x64/x86 Maschinen. Ich war nie in der Lage, ServiceStack und dann SqLite.x86 mit dem nugget-Paket zu installieren, und es funktioniert sofort.

Aber heute habe ich den Installationsvorgang mit Erfolg geändert, und es könnte eine Lösung auch für Sie sein. Ich vermute, dass das Problem immer darin besteht, dass die Version von System.Data.SQlite nicht auf die eine Servicestack.Ormlite.SqliteNET ausgerichtet ist.

Der nächste Prozess in Nuget Konsole macht die Dinge für mich arbeiten:

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

Überprüfen Sie, ob MS Visual C++ ausgeführt verteilbare installieren, da System.Data.SQLite drauf ab.

1

In Ihrer Datei App.config, diese Zeilen innerhalb des <configuration> Element hinzufügen:
<runtime> <loadFromRemoteSources enabled="true"/> </runtime>

Verwandte Themen