(これは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)
私は問題を解決しました。これは私が解決する方法です:
短編:
System.Data.SQLiteの古いバージョンを使用します。新しいバージョンにはバグがあると思われます(間違っている可能性があります)。
長編:
このプログラムの以前の古いバージョンを他のコンピューターで実行できるのに、この新しいバージョンでは実行できない理由を思い出し始めました。私が行った明らかな変更は何ですか?
はい、System.Data.SQLiteのバージョンを変更しました。
このプログラムで使用されているSystem.Data.SQLiteの古いバージョンはV1.0.66です。私が使用した新しいバージョンは最新バージョンです。V1.0.88、8 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に固執するだけです。
。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>
正常に機能するはずです。
また、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
App.configファイルで、<configuration>
要素内に次の行を追加します。<runtime> <loadFromRemoteSources enabled="true"/> </runtime>
System.Data.SQLiteが依存しているため、再配布可能なインストールを実行しているMS Visual C++かどうかを確認します。