17

(これはstackoverflow.comで尋ねられた重複した質問です。回答を読みました。解決策を試しましたが、問題は解決しませんでした。私の問題とは何か、何が問題なのかを説明しますやりました)。

これは私の問題です:

私のアプリケーションは System.Data.SQLite.DLL を使用していました。参照して自分のパソコンでは正常に動作しましたが、別のパソコンでは動作しませんでした。これはエラーメッセージです:

System.IO.FileLoadException: ファイルまたはアセンブリ 'System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139' またはその依存関係の 1 つを読み込めませんでした。サイド バイ サイド
構成が正しくないため、アプリケーションを開始できませんでした。詳細については、アプリケーション イベント ログを参照するか、コマンド ライン sxstrace.exe ツールを使用してください。
(HRESULT からの例外: 0x800736B1) ファイル名: 'System.Data.SQLite、Version=1.0.88.0、Culture=neutral、PublicKeyToken=db937bc2d44ff139' ---> System.Runtime.InteropServices.COMException (0x800736B1): アプリケーションが失敗しました並んでいるので始める
構成が正しくありません。詳細については、アプリケーション イベント ログを参照するか、コマンド ライン sxstrace.exe ツールを使用してください。
(HRESULT からの例外: 0x800736B1) SimPB.config.PrepareDatabase() で SimPB.config.InitializeProgram() で SimPB.Program.Main() で

私のコンピューターは、Windows 7 32 ビット、Visual Studio 2010 を実行しています。

別のコンピューターも、Visual Studio がインストールされていない Windows 7 32 ビットを実行しています。

私が試したこと:

試行 1:アプリケーションがRelease + x86でビルドされ、アプリケーションがターゲット フレームワーク: .NET Framework 2.0でビルドされていることを確認します。終わり。

試行 2:アプリケーションが System.Data.SQLite の正しいビルド (x86 + .Net Framework 2.0 (sqlite-netFx20-binary-Win32-2005-1.0.88.0)) で参照されていることを確認します。終わり

試行 3: App.config で次のコードを試してください。

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

この

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

この

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

終わり。

試行 4:別のコンピューターでユーザー アカウント制御をオフにしてみてください。終わり。

試行 5:別のコンピューターに Visual C++ ランタイムをインストールしてみます (Visual Microsoft Visual C++ ランタイム 2010 再頒布可能パッケージ (x86) をインストールし、2005 バージョンも試しました)。終わり。

試行 6: .NET Framework 2.0 SP2 を再インストールしてみてください。受信エラー:

Microsoft .NET Framework 2.0 SP2 をインストールまたは構成するには、コントロール パネルの [Windows の機能の有効化または無効化] を使用する必要があります。

更新:(回答とコメントを読んだ後)
試行7: System.Data.SQLite.DLLが出力ビンフォルダーにあることを確認してください。終わり

試行 8:別のコンピューターが 32 ビット Windows 7 を実行していることを再確認します。完了

試行 9: .csproj ファイルの HintPath 宣言を変更します: これを
変更します:

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

これに:

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

試行 9 で完了。

上記の試行の後、結果は同じです。アプリケーションは自分のコンピューターからは正常に実行できますが、別のコンピューターでは実行できませんでした。

これは、オープンソースのフリーウェア、Simple Phone Bookです。最新のソース コードをソース コントロール サーバーにコミットしてアップロードしました:
http://simpb.codeplex.com/SourceControl/list/changesets (変更セット番号: fd847ac6c406)

4

5 に答える 5

9

私は問題を解決しました。これが私が解決する方法です:

短編小説:
System.Data.SQLite の古いバージョンを使用します。新しいバージョンにはバグがある疑いがあります (私が間違っている可能性があります)。

長い話:
このプログラムの以前の古いバージョンが他のコンピューターで実行でき、この新しいバージョンが実行できない理由を思い出し始めました。私が行った明らかな変更は何ですか?

はい、System.Data.SQLite のバージョンを変更しました。

このプログラムで使用されている System.Data.SQLite の旧バージョンはV1.0.66です。私が使用した新しいバージョンは、 2013 年 8 月 8 日にリリースされた最新バージョンV1.0.88です。(はい、今日から約4 日前です)。詳細: http://system.data.sqlite.org/index.html/timeline

その後、新しいバージョン (V1.0.88) を破棄し、古いバージョン (V1.0.66) を使用することにし、すべて正常に戻りました。プログラムは、別のコンピューターで再び実行可能になります。

V1.0.88のソース コードを調べてみましたが、問題の原因となっているコード行を見つけることができませんでした。私が発見できる最高のものは、System.Data.SQLite.Interopのプロジェクトです。Visual Studio 2010 でソリューションを読み込むと、System.Data.SQLite.Interopは .NET Framework 4.0 用にビルドするように事前設定されています。変更方法がわかりません。その後、Visual Studio 2008 でソリューションをリロードしました。System.Data.SQLite.Interopの共通プロパティは、.NET Framework 2.0 用にビルドされることを示しています (これが私が探しているものです)。ソリューション。いくつかのビルド エラーが発生します。デバッグに時間をかけませんでした。

まだ Windows XP を使用しているユーザーがいるため、.NET Framework 2.0 用のプログラムを開発する必要があります。

V1.0.88にはバグが含まれていると思いますが、間違っている可能性があります。とにかく、現在の解決策として、私はV1.0.66に固執しています。

于 2013-08-12T14:05:59.700 に答える
1

また、x64/x86 マシンで v1.0.66 以降の SQLite にも問題がありました。ServiceStack をインストールしてから、nuget パッケージを使用して SqLite.x86 をインストールし、そのままで動作させることができませんでした。

しかし、今日、私はインストールプロセスを変更して成功しました。それはあなたにとっても解決策になるかもしれません. 問題は常に System.Data.SQlite のバージョンが Servicestack.Ormlite.SqliteNET が期待するものと一致していないことだと思います。

Nuget コンソールで次のプロセスを実行すると、うまくいきます。

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
于 2014-02-06T08:04:30.810 に答える
0

System.Data.SQLite が依存しているため、MS Visual C++ を実行している再頒布可能インストールを確認します。

于 2014-12-08T07:51:27.663 に答える