web-dev-qa-db-ja.com

System.IO.FileLoadException:ファイルまたはアセンブリ 'System.Data.SQLiteをロードできませんでした

(これは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、バージョン= 1.0.88.0、Culture = neutral、PublicKeyToken = db937bc2d44ff139' ---> System.Runtime.InteropServices.COMException(0x800736B1) :サイドバイサイドのため、アプリケーションの起動に失敗しました
構成が正しくありません。詳細については、アプリケーションイベントログを参照するか、コマンドラインのsxstrace.exeツールを使用してください。
(HRESULTからの例外:0x800736B1)SimPB.config.PrepareDatabase()at SimPB.config.InitializeProgram()at 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)

14
mjb

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

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

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

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

このプログラムで使用されているSystem.Data.SQLiteの古いバージョンはV1.0.66です。私が使用した新しいバージョンは最新バージョンです。V1.0.888 August 201でリリースされました。 (はい、約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に固執するだけです。

5
mjb

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

あなたは本当にその場所に.dllを持っているので、あなたのマシンで動作します。ただし、他の人は、リポジトリのルートに配置したSystem.Data.SQLite.dllファイルを使用する場合があります。 .csprojから1レベル上にあるため、次のように相対パスを使用できます。

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

正常に機能するはずです。

6

また、x64/x86マシンのv1.0.66以降、SQLiteで問題が発生しました。 nugetパッケージでServiceStackをインストールしてから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
1
jruizaranguren

App.configファイルで、<configuration>要素内に次の行を追加します。
<runtime> <loadFromRemoteSources enabled="true"/> </runtime>

1
Coder1224

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

0
Leng Weh Seng