DLL 'SQLite.Interop.dll'をロードできません


205

定期的に次の例外が発生します。

Unable to load DLL 'SQLite.Interop.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

1.0.82.0を使用しています。バージョン、それをnu2010でVS2010、OS Win7 64にインストールします。

例外が表示され始めると、それは常に表示されます-VS内または外部のデバッグおよびリリースおよび実行中のアプリケーション。

これを停止する唯一の方法は、ログオフとログオンです。例外はスローされず、dllがロードされます。それは数日間働くことができますが、その後再び壊れることがあります。

誰かがこのようなものを見たことがありますか?それに対する解決策はありますか?


2
はい、常にコピーするように設定されています。bin / debugにx64およびx86フォルダーがあります。そして、それはほとんど動作しますが、時々動作を停止します。おそらく、何かがdllへのアクセスをブロックしているので、次に機能しなくなったときにそれを見つけようとします。私が言ったように、それは何の問題もなく数日働くかもしれません。
xll

13
SQLite nugetパッケージを新しいコンソールプロジェクトに追加した直後に、このエラーが発生しました。SQLite.Interop.dllをx86フォルダーから1レベル上に手動でコピーすると、アプリを実行できます。これはそんなに壊れるだろうと私には奇妙に思えます。
lesscode、

@ウェインはい、これは間違いなく役立ちます。しかし、私の場合、私たちは一緒にプロジェクトに取り組んでおり、私の友人はx86を使用していますが、私はx64 OSを使用しています。そして、気づいたように、時々機能しなくなります。それは先月私には起こりませんでしたが。
xll

1
SQLiteの正しいバイナリをダウンロードした場合は、プロジェクトのビルドオプションに従ってSQLite.Interop.dllをReleaseまたはDebugフォルダーにコピーします。
Elshan

これは非常にランダムなバグです...私のプロジェクトでは発生することもあれば、そうでないこともあります。すべてを試しました。
BK

回答:


141

パーティーに遅れていることはわかっていますが、本日最新のx86 / x64(バージョン1.0.88.0)をプルダウンした直後にこの問題が発生しました。VS2012のローカルIISはデフォルトで32ビットで実行され、x64に切り替える簡単な方法はありません。私の運用サーバーは64ビットを実行しています。

とにかく、DLLプロジェクトにNuGetパッケージをインストールしたところ、このエラーが発生しました。それを機能させるために私がしなければならなかったことは、メインサイトプロジェクトにもインストールする必要があったことです。SQLiteクラスにはまったく触れていません。

私の推測では、SQLiteはエントリアセンブリを使用して、ロードするInteropのバージョンを検出します。


11
SQLite Coreへの参照をNuGetとともにメインプロジェクトに追加した後、それは私のために働きました。
Luca Cremonesi、

メインプロジェクトにsqllite.coreを追加すると、私のWPFソリューションで
うまくいった

db呼び出しがライブラリにあるにもかかわらず、install-package SqliteとInstall-Package System.Data.SQLite.Coreの両方を自分のWebサイトに実行する必要がありました...

これが答えです。
ボビートゥルカリノ2017

4
「メインサイト」プロジェクトとはどういう意味ですか?私の場合、私はデスクトップ作業をしています。「スタートアップ」プロジェクトですか?
UuDdLrLrSs 2018

60

私が使用していたdllに依存関係としてSqliteがあったため、この問題が発生しました(SqliteコアパッケージのみでNuGetに構成されています)。プロジェクトは、 'SQLite.Interop.dll'(x86フォルダーとx64フォルダーの両方)を除くすべてのSqlite dllをコンパイルしてコピーします。

ソリューションは非常に簡単でした:ビルド/実行しているプロジェクトに(NuGetを使用して)Sqlite.Coreパッケージを依存関係として追加するだけで、dllがコピーされます。


私のために働いた!ありがとう
Tristan Djahel

同意した。「Sqlite.Net PCL」パッケージを使用していますが、「System.Data.SQLite Core(x86 / x64)」も必要であることがわかりました。また、「任意のCPU」ではなく「x86」または「x64」のプラットフォームターゲットを使用するように、プロジェクトを参照するプロジェクトを変更する必要がありました。
Andrew Stephens

2
ここに掲載されているかなりの数のソリューションを試したところ、これが実際に最もうまくいきました。
バットマン

2
そのような依存関係をどのように追加できますか?実行したことがない(VS2013)
jpgrassi

3
ツール-> NuGetパッケージマネージャー->ソリューションのNuGetパッケージの管理...->オンライン->すべてに移動します。次に、sqliteを検索し、System.Data.SQLite Core(x86 / x64)を追加します。
Marin

44

プラットフォームターゲットがであるWPFプロジェクトでSQLiteを使用するときにも、同じ問題が発生しましたAny CPU。次の手順に従って修正しました。

  1. Visual Studioでプロジェクトデザイナーを開きます。それを行う方法の詳細はここにあります
  2. [ビルド]タブをクリックします。
  3. prefer 32-bitオプションを無効にします。

または、プラットフォームターゲットをx86またはに設定することもできますx64。この問題は、System.Data.SQLite、プラットフォームターゲットを使用して「SQLite.Interop.dll」ファイルの場所を取得するライブラリます。

更新:

プロジェクトデザイナーにアクセスできない場合は*.csproj、テキストエディターからプロジェクト()ファイルを開き、値<Prefer32Bit>false</Prefer32Bit><PropertyGroup>...</PropertyGroup>タグに追加します。

コード例

<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>[Set by Visual Studio]</ProjectGuid>
    <OutputType>Exe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>[Set by Visual Studio]</RootNamespace>
    <AssemblyName>[Set by Visual Studio]</AssemblyName>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <FileAlignment>[Set by Visual Studio]</FileAlignment>
    <!--Add the line below to your project file. Leave everything else untouched-->
    <Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>

私はVS 2010を使用していますが、そのようなオプションはありません。
xll

@xll、わかりやすくするために回答を編集しました。編集によって問題が解決するかどうかを確認します。
Caleb Kiage 2013年

10
VS2012では、このオプションはグレー表示されます。
Kugel 2013

6
このオプションはEXEプロジェクトでのみ有効ですが、私たちのほとんどは単体テストプロジェクトでこの問題を抱えていると思います。
ブラノン、2014年

1
VS Pro 2015のWPFプロジェクトで私のためにグレー表示されました。 .csprojファイルはfalse既に設定されていますが、まだエラーがありました。
vapcguy 2017

32

これが私のプロジェクトで修正した方法です。

それは機能しており、同僚が彼の変更を送信すると、「DLL 'SQLite.Interop.dll'をロードできません」という例外が発生しました。

プロジェクトの.csprojファイルを比較すると、これは非機能バージョンでした:

<ItemGroup>
     <Content Include="x64\SQLite.Interop.dll" />
     <Content Include="x86\SQLite.Interop.dll" />
</ItemGroup>

そしてこれはWORKINGバージョンが持っていたものです:

<ItemGroup>
     <Content Include="x64\SQLite.Interop.dll">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      </Content>
      <Content Include="x86\SQLite.Interop.dll">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      </Content>
</ItemGroup>

元に戻した後、私は例外を受け取りませんでした。DLLファイルは、適切なDebug \ x64(etc)フォルダーにダンプされました。


"SQLite.Interop.dll"の<itemgroup>がプロジェクトの.csprojファイルにありません。それでも私はあなたのソリューションを追加しようとしましたが、うまく
いき

これはVS2012では機能せず、要素は存在しません。
htm11h 2015

どうもありがとうございました。2015年との比較
Jevgenij Kononov

29

そのため、NuGetを追加した後、展開は相互運用性をコピーしません。これをcsprojファイルに追加すると、その動作が修正されます。

 <PropertyGroup> 
    <ContentSQLiteInteropFiles>true</ContentSQLiteInteropFiles>
    <CopySQLiteInteropFiles>false</CopySQLiteInteropFiles>
    <CleanSQLiteInteropFiles>false</CleanSQLiteInteropFiles>
    <CollectSQLiteInteropFiles>false</CollectSQLiteInteropFiles>
 </PropertyGroup>

NuGet for SQLiteのソースを見ると、これらが具体的に何をしているのかがわかります。これにより、ASP.Net Coreで動作する配置を取得できました。


10
ContentSQLiteInteropFilesが答えです。上位の回答のほとんどは当て推量です。
Corey Alix

6
はい、ContentSQLiteInteropFilesが答えです。1.これは受け入れられた回答である必要があります。2.一方、調査する必要があります。それは、nugetパッケージとして、これを自動的に機能させる方法、または少なくともこの構成の必要性を文書化することです。
gerleim

受け入れられる答えでなければなりません。超シンプル。1.プロジェクトをアンロード2.上記をcsprojに追加3.プロジェクトを再ロード 簡単です...
BillRuhl

24

この状態になったら、Rebuild-Allを実行してみてください。これで問題が解決した場合は、同じ問題が発生している可能性があります。

背景(私の理解)

  • SQLiteには、1つのマネージアセンブリ(System.Data.SQLite.dll)といくつかのプラットフォーム固有のアセンブリ(SQLite.Interop.dll)があります。Nugetを使用してSQLiteをインストールする場合、Nugetはプラットフォーム固有のアセンブリをプロジェクト(複数のフォルダー:\ x86、\ x64内)に追加し、これらのDLLを「常にコピーする」ように構成します。

  • ロード時に、マネージアセンブリは\ x86および\ x64フォルダー内のプラットフォーム固有のアセンブリを検索します。詳しくはこちらご覧ください。例外は、このマネージアセンブリがこれらのフォルダー内の関連する(SQLite.Interop.dll)を見つけようとする(そして失敗する)ことです。

私のシナリオ

私のソリューションには2つのプロジェクトがあります。WPFアプリとクラスライブラリ。WPFアプリはクラスライブラリを参照し、クラスライブラリはSQLite(Nugetを介してインストールされます)を参照します。

私にとっての問題は、WPFアプリのみを変更すると、VSが部分的な再構築を試行することでした(依存するdllが変更されていないことに気付きました)。このプロセスのどこかで、VSは\ x86および\ x64フォルダーのコンテンツをクリーンアップします(SQLite.Interop.dllを吹き飛ばします)。フルRebuild-Allを実行すると、VSはフォルダーとその内容を正しくコピーします。

私の解決策

これを修正するために、xcopyを使用して\ x86および\ x64フォルダーをクラスライブラリからWPFプロジェクトの\ binディレクトリに強制的にコピーするPost-Buildプロセスを追加しました。

または、ビルド構成/出力ディレクトリを使用して、より洗練された処理を行うこともできます。


1
私が受け取ったメッセージは、それらのファイルが見つからないことを教えてくれましたが、許可の問題だと思いました。私はあなたのメッセージを見て、私が展開したときに実際にはサーバーに届かないことに気づきました。
Stradas 2015

1
私のほぼ同じ解決策は、x86フォルダーとx64フォルダーをスタートアッププロジェクトに追加し、x86相互運用ファイルとx64相互運用ファイルをそれぞれのフォルダー内に追加することでした。ファイルのオプションを「コンテンツ」と「常にビルド」に設定しました。これは、ClickOnceを使用してアプリを他のPCに展開したときに、Windowsフォームアプリを埋め込みs3dbデータベースファイルに接続できる唯一の方法です。PCでアプリを開発してテストしたところ、イライラしてSQLiteエラーは発生しませんでした。
David Alan Condit 2016年


1
これは私の問題を理解するのに役立つ答えですが、私の修正は少し異なります。私の問題は、system.data.Sqlite.dllを手動で追加したことです。このように、Sqlite.Interop.dllは自動的に\ x86およびx64にコピーされません。修正は、参照を削除してNugetで追加することです。
Susan Wang

19

Visual Studio Express 2013の実行中に同じ問題が発生しました。ここや他の場所で言及されているいくつかの解決策を試しても役に立たなかった。この修正が他のユーザーの役に立てば幸いです。

SQLiteベースのサービスをテストするテストクラスのDeploymentItem属性を使用して修正しました。

例:

[TestClass]
[DeploymentItem(@"x86\SQLite.Interop.dll", "x86")] // this is the key
public class LocalStoreServiceTests
{

    [TestMethod]
    public void SomeTestThatWasFailing_DueToThisVeryIssue()
    {
         // ... test code here
    }
}

これにより、必要なSQLite.Interop.dllものがx86適切な「TestResults」フォルダ内のディレクトリにコピーされます。

すべてが緑です。すべてが良いです。


1
このソリューションは、Microsoft.VisualStudio.TestTools.UnitTesting名前空間を使用している場合にのみ機能します
sapbucket

4
MSTestを使用している場合、これは正しいソリューションです。テストにDeploymentItem( "some.csv")を使用するまで、SQLiteは問題なく動作し、SQLite.Interop.dllを問題なく見つけました。この方法で.csvファイルを含めると、MSTestはすべての参照されたdllをTestResultsディレクトリにコピーします。SQLite.Interop.dllはプロジェクトで参照されていないため(アンマネージコードであるため参照できません)、コピーされません。
ヨハン

あなたの最善の策は、各アーキテクチャに1つずつ、2行を追加することです。これは、テストランナーがたまたま64ビットで実行されている場合にあなたを保護します。
Kirk Woll 2016年

13

Tools -> Extension and updatesコマンドからNuGetを更新してSQLite.Coreを再インストールすると、PM> Update-Package -reinstall System.Data.SQLite.Core修正されました。


これを行うときにエラーが発生した場合、SQLite DLL /参照を削除し、それらをnugetから完全に再インストールするとうまくいきました
KayakinKoder

sqlliteコアのヘルプも再インストールしてください。VS2012で発生しました。VSはx62バージョンをWeb展開パッケージに含めませんでした
Andrey R

VS2015 Professionalでも修正されました。
Rahul Kishore 2017

9

複数のプロジェクトソリューションで同様の問題がありました。SQLite.Interop.dllは、ClickOnceを使用してソフトウェアと共に配布されたプラグインの1つに必要でした。

Visual Studioでのデバッグに関する限り、すべてが正常に機能しましたが、展開されたバージョンには、そのDLLを含むフォルダーx86 /およびx64 /がありませんでした。

ClickOnceを使用した展開後に機能させるソリューションは、ソリューションのスタートアッププロジェクト(公開されているもの)でこれらの2つのサブフォルダーを作成し、DLLにコピーして、それらをContent Copy Alwaysとして設定することでした。

このようにして、ClickOnceパブリッシングツールは、これらのファイルとフォルダーをマニフェストに自動的に含め、ソフトウェアをそれらと共に展開します


1
これは私にとって有効な唯一の解決策でした...そして、男の子..アプリがユーザーのPCで閉じるだけでデバッグするのが面倒だったのです。
ストイック

8

ここには本当にたくさんの答えがありますが、私のものはシンプルで明確で、GACプレイアラウンドはありません

問題は、実行可能ファイルにSQLite.Interop.dllデータベースにアクセスするための権利(x86またはx64)のコピーが必要だったことです。

ほとんどのアーキテクチャにはレイヤーがあり、私の場合、データレイヤーにはSQLite接続に必要なDLLがあります。

だから私は自分のデータレイヤーソリューションにビルド後のスクリプトを入れるだけで、すべてがうまくいきました。


TL; DR;

  1. ソリューションのすべてのプロジェクトをビルドオプションに設定するx86x64、ビルドオプションに設定します。

  2. 以下Post-Build-Scriptをプロジェクトに追加しますSQLite nuget Package

    xcopy "$(TargetDir)x64" "$(SolutionDir)bin\Debug\" /y

もちろん、スクリプトを変更してビルドする必要がRelease Buildありx86ます。


STL; DR;

あなたのSQLite.Interop.dll隣に*.exeファイルを置きます。


6

NuGetからのマルチアーキテクチャ(x86、x64)バージョンのSQLiteのデフォルトのインストールは、あなたが説明した動作を示します。.NETランタイムがマシン上でアプリケーションを実行するために選択した実際のアーキテクチャの正しいバージョンをロードしたい場合は、次のように、DLLローダーに正しいライブラリの場所を示すヒントを与えることができます。

Program32.Main()の前に、SetDLLDirectory()へのkernel32.dll関数呼び出しの宣言を追加します。

    [System.Runtime.InteropServices.DllImport("kernel32.dll", CharSet = System.Runtime.InteropServices.CharSet.Unicode, SetLastError = true)]
    [return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
    static extern bool SetDllDirectory(string lpPathName);

次に、独自の方法を使用して正しいサブディレクトリを特定し、「SQLite.Interop.dll」のアーキテクチャ固有のバージョンを見つけます。次のコードを使用します。

    [STAThread]
    static void Main()
    {
        int wsize = IntPtr.Size;
        string libdir = (wsize == 4)?"x86":"x64";
        string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
        SetDllDirectory(System.IO.Path.Combine(appPath, libdir));

4

古い投稿であっても、ここで見つけた解決策を共有したいと思います:http : //system.data.sqlite.org/index.html/info/54e52d4c6f

すべての問題を読みたくない場合の解決策は、 "msvcr100.dll"ファイル(Windows \ System32ディレクトリにあります)をSQLite.Interop.dllと同じパスにコピーすることです。

問題を読んで理由を理解し、セットアップにファイルを含めることをお勧めしますが、エラーが発生した場合にのみインストールするために、セットアップオプションで選択可能なオプションのコンポーネントにしました。

HTH、フォーメンツ


これを本当にありがとう、私は他のすべてを試してみました、そしてこれが解決策でした
デビッド・ベンコ

4

SQLiteのウィキが言う、あなたのアプリケーションの展開がなければなりません。

アプリケーションの配置

したがって、ルールに従う必要があります。画像で説明しているように、ターゲットプラットフォームに一致するDLLを見つけて場所に置きます。DLLはYourSolution / packages / System.Data.SQLite.Core。%version%/にあります。

アプリケーションの展開に問題があったため、プロジェクトに正しいSQLite.Interop.dllを追加し、セットアッププロジェクトのAppplicationFolderにx86フォルダーを追加し、dllへのファイル参照を追加しました。


3

64ビットプロジェクトで32ビットDLLを実行しようとした場合にも、このエラーが発生する可能性があります。

x86フォルダーとx64フォルダーの両方に同じファイル(32ビットバージョンのSQLite.Interop.dll)を配置したときに、これが表示されました。



3

なぜこれが含まれていないのかはわかりませんが、調査をして自分で見つけなければならなかったので、誰かがこの答えを見つけてトラブルを救ってくれるといいのですが。これはWPFアプリ用でした。私のDevボックスでは問題なく動作しましたが、コピーしたコンピューターでは動作せず、Unable to load DLL 'SQLite.Interop.dll'エラーが発生しました。実行時にOPと同じエラーが発生したときに、関連するすべてのディレクトリとファイルを、「デバッグ」フォルダーからこの他のコンピューターに直接移植しました。DLLを含む "bin"フォルダーは "Debug \ bin"にコピーされ、すべてが含まれていました。このパスを使用して他のコンピューターにコピーしたときのアプリケーションファイルも含まれていたため、ファイルが失われていませんでした。

私が見たものは当てはまらない他の答えで言った:

  • NuGetパッケージを使用しなかったか、NuGetパッケージが作成するように見えるx86またはx64フォルダーを作成する必要がありました。私のDLL(System.Data.SQLiteとSQLite.Interop.dll、およびSystem.Data.SQLite.config)はプロジェクトの「bin」フォルダーにあり、手動でコピーされました(ソリューションエクスプローラーで「bin」フォルダーを作成) VS、WindowsエクスプローラーでこのフォルダーにDLLを貼り付け、[追加]> [既存のアイテム]を使用してファイルをVSフォルダー/プロジェクトに移動します。次に、その場所を使用して、プロジェクト内の参照アセンブリとしてそれらを参照します([参照]> [参照の追加]を選択し、参照して参照し、すすぎ、残りについて繰り返します)。これにより、私のプロジェクトがそれらがどこにあるかを正確に知ることができます。
  • app.configでSQLite DLLファイルを参照したり、MyProject.csprojファイルを変更したりする必要はありませんでした。
  • 特定のプロセッサを指定する必要さえありませんでした!私のプロジェクトのビルドは「すべてのCPU」用ですが、混合または64ビットDLLしかなく、64ビットOSであるWindows 7以降でのみ実行されます。(x86のみ/ 32ビットのみDLLなし)
  • OPのエラーが発生したとき、これらのDLLの「コンテンツ」および「新しい場合はコピー」としてすでに指定しています。

私が見つけたのはこれです、https//system.data.sqlite.org/index.html/doc/trunk/www/faq.wiki#q20から:

(11)アプリケーションを実行しようとすると、DllNotFoundException( "sqlite3.dll"または "SQLite.Interop.dll"の場合)が発生するのはなぜですか?

名前付きダイナミックリンクライブラリ(DLL)が見つからないか、依存関係がないために読み込むことができません。名前付きダイナミックリンクライブラリがアプリケーションディレクトリまたはシステムPATHに沿ったディレクトリにあることを確認して、再試行してください。また、静的にビルドされたダイナミックリンクライブラリを使用していない限り、必要なVisual C ++ランタイム再頒布可能パッケージがインストールされていることを確認してください。

段落内の太字部分を強調してください。対象のコンピューターは新しく、.NET 4.0以外のプログラムは読み込まれていません。C ++をインストールすると、SQLiteへのコマンドを完了することができました。これは最初のFAQの1つであり、前提条件の一部であるはずですが、#11に埋められていました。開発用コンピューターにはVisual Studioが付属しているため、既に読み込まれているので、そこで機能しました。

ダウンロード:
Visual Studio 2015のVisual C ++再頒布可能パッケージ:https :
//www.microsoft.com/en-us/download/details.aspx?id=48145

更新3(累積的な更新):https :
//www.microsoft.com/en-us/download/details.aspx?id=53587


3

Costura.Fodyを使用してアセンブリ(.net)をパッケージ化し、ネイティブDLLを埋め込み、プリロードしました。これは、1つのファイルを送信できるので、配布にも役立ちます。

  1. NugetからCostura Fodyをインストールします。

  2. C#プロジェクトで、costrua32というフォルダーを作成します。そこに、C#で読み込むネイティブDLLを追加します。

  3. これらをこのフォルダに追加したら。プロパティウィンドウをクリックし、ビルドアクションを「組み込みリソース」に変更します。

  4. 最後に、FodyWeavers.xmlというXMLファイルを次のように修正する必要があります。ここでは、最初にSQL DLLをロードするように指定しています。(.dllをドロップすることに注意してください)

    Weavers
     Costura
      PreloadOrder
       SQLite.Interop
       tbb_debug
       tbb
      /PreloadOrder>
     /Costura
    /Weavers

これの利点は、ビルド前またはビルド後のイベントを作成する必要がなく、最終製品が1つの大きなファイルに完全にカプセル化されることです。


フォルダー名はcostura32、ドキュメントgithub.com/Fody/Costura#native-libraries-and-preloadorderにする
Elton Saunders


2

PCにVisual C ++ 2010再頒布可能パッケージがインストールされていないため、この問題が発生しました。Visualc ++ 2010再頒布可能パッケージをまだインストールしていない場合は、ダウンロードしてインストールしてください(x86または64 dllを確認してください)。


はい。これも私の場合でした...私だけがVisual C ++ 2010再頒布可能SP1を必要としていました。最善の解決策は、バージョンに必要なランタイムを注意深く読むことです。たとえば、ここに:system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
Velja Radenkovic


2

同じ問題が発生しました。しかし、ようやく修正できます。現在、Visual Studio 2013 Community Editionを使用しています。Add-> Existing Item ...を使用して、SQLite.Data.SQLiteファイルがある場所を参照します(私の場合は 'C:\ Program Files(x86)\ System.Data.SQLite \ 2013 \ bin')。含めるファイルのタイプをアセンブリファイル(* .dll; * .pdb)に変更することを忘れないでください。そのフォルダで「SQLite.Interop.dll」を選択します。そこからは全く問題なく続けることができます。皆さん、頑張ってください。^ _ ^ PS Webフォームアプリケーションを作成します。私はまだウィンドウフォームアプリケーションや他のアプリケーションで試したことはありません。


2

ビルドする前に、プラットフォームターゲットをx86またはx64(CPUではなく)に設定してみてください。VisualStudioのプロジェクト->プロパティ->ビルド->プラットフォームターゲット。


2

SQLite.Interop.dllをプロジェクトディレクトリにコピーします。

src\
  project\
      bin\   <-- Past in bin
         x64\
           SQLite.Interop.dll <-- Copy this if 64
         x86\
           SQLite.Interop.dll <-- Copy this if 32

この問題を解決するには、IIS_APPPOOLにBinファイルへの編集権限を付与する必要がありました。ddlをコピーしただけで、dllへのアクセスが拒否されました
AlexanderD

これらのファイルを追加することで問題は解決しましたが、これは一時的な解決策です。
Kartik Goyal

2

私はこれに長い間取り組んできましたが、ときどき、テスト設定が正しくないことがわかりました。この画像を参照してください: テスト設定

テスト設定のチェックを外すだけで、問題が消えます。そうしないと、例外が発生します。うまくいけば、これは誰かを助けるでしょう。それが根本的な原因かどうかはわかりません。


1
このリンクで質問に答えることができますが、回答の重要な部分をここに含め、参照用のリンクを提供することをお勧めします。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。- レビューから
ロバートコロンビア

私の場合、testsettingsファイルが間違っています:<TestSettings ... <Deployment> <DeploymentItem filename = "bin \ Relase \ a.test.dll"。ファイルの場所が正しく構成されていません。
Tony Sun、

2

"SQLite.Interop.dll"ファイルをx86とx64の両方のデバッグフォルダーにコピーします。これらのファイルは、デバッグフォルダーの「x86」および「x64」フォルダーにコピーする必要があります。


2

私のアプリケーションはWebアプリケーション(ASP.NET MVC)であり、のLocalSystem代わりに実行するようにアプリケーションプールを変更する必要がありましたApplicationPoolIdentity。これをする:

  1. IISマネージャーを開く
  2. サイトが実行されているアプリケーションプールを見つけます。
  3. アクションから[詳細設定]をクリックします
  4. IDをに変更 LocalSystem

なぜこれが問題を解決するのか私にはわかりません。


1

良い答えかどうかはわかりませんが、「ローカルシステム」のIDを使用してAppDomainでアプリケーションを実行することで、この問題を解決することができました。


1

SQLiteデータベースにテストデータを追加する簡単なコンソールアプリケーションで作業していて、このエラーが発生していました。プロジェクトの構成は「Any CPU」です。SQLite.Interop.dllをbin \ debugフォルダーにコピーして修正しました。より良い方法は@Wilによるメソッドを使用することですが、「任意のCPU」構成に対してこれをどのように指定しますか?


1

アセンブリの競合はありますか?DLLにファイルロックが設定されている別のアプリケーションがあるかどうかを確認します。

これが理由の場合、SysinternalのProcess Explorerなどのツールを使用するのは簡単です。て問題のプログラムをます。

HTH、クレイ


1

この質問を見ている人のための参考のために:

nugetパッケージを使用すると、コピーを実行するビルドルールがインストールされます。(System.Data.SQLite.Core.1.0.94.0 \ buildまたはインストールしたCoreのバージョンを参照してください)。

nugetインストーラーは、ルールをプロジェクトファイルに自動的に追加します。

ただし、これでもテストケースの問題は修正されません。DeploymentItem(https://stackoverflow.com/a/24411049/89584)アプローチは、そこで機能しているように見える唯一のものです。


1

私はこの問題に遭遇しました。WebAPI/ MVC5 WebプロジェクトとFeature Testプロジェクトのソリューションでは、どちらも同じデータアクセス(または「コア」)プロジェクトを利用していました。私は、他の多くの人と同様に、Visual Studio 2013でNuGetを介してダウンロードしたコピーを使用しています。

私がしたことは、Visual Studioで機能テストとWebプロジェクトにx86およびx64ソリューションフォルダーを追加したことです。次にRight Click | Add Existing Item.....\SolutionFolder\packages\System.Data.SQLite.Core.1.0.94.0\build\net451\[appropriate architecture]を実行し、それらの各フォルダーから適切なSQLite.interop.dllライブラリを追加しました。次にを実行し、Right Click | Propertiesに設定Copy to Output DirectoryしましたAlways Copy。次に機能テストを実行する必要が生じたとき、テストは正常に実行されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.