ADBLOCKを無効にする

ADBlockがサイトの一部のコンテンツをブロックしています

ADBlock errore

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

StackOverflow https://stackoverflow.com/questions/1278929

質問

私は私のASP.NETプロジェクトにELMAH 1.1 .NET 3.5のx64をインストールしていると(私は任意のページを参照しようとするたびに)今、私はこのエラーを取得しています:

  

ファイルまたはアセンブリをロードできませんでした。   「System.Data.SQLite、バージョン= 1.0.61.0、   文化=中立、   なPublicKeyToken = db937bc2d44ff139' または   その依存関係の1つ。試み   でプログラムをロードしました   間違ったフォーマットます。

     

説明:   未処理の例外が発生した時に   現在のWebの実行   要求。スタックトレースを確認してください   エラーの詳細については、   そして、それはコードの発生元ます。

     

例外の詳細:   System.BadImageFormatException:でした   ファイルまたはアセンブリをロードしません   「System.Data.SQLite、バージョン= 1.0.61.0、   文化=中立、   なPublicKeyToken = db937bc2d44ff139' または   その依存関係の1つ。試み   でプログラムをロードしました   間違ったフォーマットます。

下部の

その他のエラーの詳細ます。

私のアクティブソリューションプラットフォーム「は、任意のCPU」と私は、もちろん、x64ではx64のWindows 7でのプロセッサを実行していますよ。 1.0 .NET 3.5(それがコンパイルされていますいる唯一のプラットフォームであるx86のは、)私たちのx64のWindowsサーバー上でこの同じエラーを与えたので。

私たちはELMAHのこのバージョンを使用している理由は、

私は、x86およびx64用にコンパイルしようとしたと私は同じエラーを取得します。私はすべてのコンパイラの出力(binとOBJ)を削除しようとしました。

:最後に、私はSQLiteのへの参照は、直接DLLサーバー上で動作するプロジェクトのために必要ではなかったと私は、このコンパイラエラーを持っている何かを作りました
  

エラーなどのエラー1警告:アセンブリの生成 - 参照アセンブリ「System.Data.SQLite.dll」標的異なるプロセッサMyProjectと

問題が何であるか任意のアイデア?

その他のエラーの詳細ます:

  

ソースエラー:

     

未処理の例外が生成されました   現在の実行中に   Webリクエスト。情報   原点と例外の場所   例外を用いて同定することができます   以下のスタックトレースます。

     

スタックトレースます:

     

[BadImageFormatException:ことができませんでした   ロード・ファイルまたはアセンブリ   「System.Data.SQLite、バージョン= 1.0.61.0、   文化=中立、   なPublicKeyToken = db937bc2d44ff139' または   その依存関係の1つ。試み   でプログラムをロードしました   間違ったフォーマット。]
  System.Reflection.Assembly._nLoad(のAssemblyName   ファイル名、文字列のコードベース、証拠   assemblySecurity、アセンブリ   locationHint、StackCrawlMark&   stackMark、ブール   throwOnFileNotFound、ブール   forIntrospection)+0
  System.Reflection.Assembly.nLoad(のAssemblyName   ファイル名、文字列のコードベース、証拠   assemblySecurity、アセンブリ   locationHint、StackCrawlMark&   stackMark、ブール   throwOnFileNotFound、ブール   forIntrospection)43
  System.Reflection.Assembly.InternalLoad(のAssemblyName   assemblyRef、証拠   assemblySecurity、StackCrawlMark&   stackMark、ブールforIntrospection)   127 System.Reflection.Assembly.InternalLoad(文字列   assemblyString、証拠   assemblySecurity、StackCrawlMark&   stackMark、ブールforIntrospection)   142 System.Reflection.Assembly.Load(文字列   assemblyString)28
  System.Web.Configuration.CompilationSection.LoadAssemblyHelper(文字列   AssemblyName、ブールstarDirective)   46

     

[ConfigurationErrorsException:でした   ファイルまたはアセンブリをロードしません   「System.Data.SQLite、バージョン= 1.0.61.0、   文化=中立、   なPublicKeyToken = db937bc2d44ff139' または   その依存関係の1つ。試み   でプログラムをロードしました   間違ったフォーマット。]
  System.Web.Configuration.CompilationSection.LoadAssemblyHelper(文字列   AssemblyName、ブールstarDirective)   613 System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory()   203 System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo   AI)105
  System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection   compConfig)178
  System.Web.Compilation.BuildProvidersCompiler..ctor(VirtualPath   configPath、ブール   supportLocalization、文字列   outputAssemblyName)54
  System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult(ブール   isPrecompiledApp)232
  System.Web.Compilation.BuildManager.CompileGlobalAsax()   52 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()   337

     

[HttpException(0x80004005が):ことができませんでした   ロード・ファイルまたはアセンブリ   「System.Data.SQLite、バージョン= 1.0.61.0、   文化=中立、   なPublicKeyToken = db937bc2d44ff139' または   その依存関係の1つ。試み   でプログラムをロードしました   間違ったフォーマット。]
  System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()   58 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()   512 System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManagerの   AppManagerに、IApplicationHost APPHOST、   IConfigMapPathFactory   configMapPathFactory、   HostingEnvironmentParameters   hostingParameters)729

     

[HttpException(0x80004005が):ことができませんでした   ロード・ファイルまたはアセンブリ   「System.Data.SQLite、バージョン= 1.0.61.0、   文化=中立、   なPublicKeyToken = db937bc2d44ff139' または   その依存関係の1つ。試み   でプログラムをロードしました   間違ったフォーマット。]
  System.Web.HttpRuntime.FirstRequestInit(のHttpContext   コンテキスト)+8896783
  System.Web.HttpRuntime.EnsureFirstRequestInit(のHttpContext   コンテキスト)85
  System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest   WR)259

溶液

System.Data.SQLite.dll、すなわち、それは、マネージコードとネイティブコードの両方を含む、混合アセンブリです。したがって、特定のSystem.Data.SQLite.dllは、x86またはx64、決してその両方です。

<強い>更新(の礼儀J.パブロ・フェルナンデスの):のカッシーニは、Visual Studioで使用する開発用ウェブサーバーF5キーを押すか、ボタンを緑色の«プレイ»をクリックしたときに、ありますx86の唯一のどのワークステーションがx64の場合でも、あなただけSystem.Data.SQLite.dllのx86バージョンを使用することができますことを意味します。

の代替が正しくx64のであるカッシーニが、IIS7を使用することではありません。

その他のヒント

「32有効 - ビットアプリケーションを」ことを確認します。アプリケーションプールのためにfalseに設定されている。

IIS7 Application Pool -> advanced settings and set the 32-bit application to trueに移動します。

あなたはSQLiteのを使用していない場合は、

これは非常に単純です。

あなたは、あなたがELMAHを参照するフォルダから、あなたのソリューションのbinフォルダからSQLiteのDLLを削除することができます。再構築し、そしてあなたのアプリは、あなたが使用していないこのDLLをロードしようとしません。

私は、64ビットのdevのマシンと32ビットのビルドサーバーを持っています。私はNHibernateは初期化する前にこのコードを使用していました。任意のアーキテクチャ上の魅力を作品(だけでなく、私がテストしている2)。

これは誰かに役立ちます願っています。

グイド

        private static void LoadSQLLiteAssembly()
        {
            Uri dir = new Uri(Assembly.GetExecutingAssembly().CodeBase);
            FileInfo fi = new FileInfo(dir.AbsolutePath);           
            string binFile = fi.Directory.FullName + "\\System.Data.SQLite.DLL";
            if (!File.Exists(binFile)) File.Copy(GetAppropriateSQLLiteAssembly(), binFile, false);
        }

        private static string GetAppropriateSQLLiteAssembly()
        {
            string pa = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE");
            string arch = ((String.IsNullOrEmpty(pa) || String.Compare(pa, 0, "x86", 0, 3, true) == 0) ? "32" : "64");
            return GetLibsDir() + "\\NUnit\\System.Data.SQLite.x" + arch + ".DLL";
        }

とまったく同じ問題でロードキルWikiにかなりの数のバグレポートに対処しなければならなかった誰かのように、これはあなたが何をする必要があるかです。

  • あなたは、x64またはx86を使用していますか? System.Data.SQLite.dll System.Data.SQLite.Linq.dllます。
  • :公式プロバイダの2つのDLLがあり、あなたのbinフォルダに正しいものをコピーする - SQLiteは、別のアーキテクチャ用のDLLが付属しています
  • あなたはこれらのアセンブリのために周りの狩猟を気にすることはできません場合は、あなたのアプリケーションプール(のみ通常のdevのマシンのためのソリューション)
  • のために32ビットモードを有効にします
  • あなたは、サーバー上でホスティングしている場合は、Microsoft C ++ランタイム再配布をする必要があります - それは、デフォルトでサーバー2008 R2にインストールされていません。 のx64バージョンで、 x86バージョンするます。

これは、あなたがたときに再配布するSQLiteの.NETバイナリを介してジャンプする必要がどのように多くのフープお尻の本当の痛みだし、最後にはロードキルのための私の解決策は、に基づいて、〜/ binフォルダに適切なバイナリをコピーしましたアーキテクチャあなたの使用。残念ながら、それはC ++ランタイムの問題を解決していません。

私はNuget拡張子を持つSystem.Data.SQLiteをインストールすることによって、これを解決しました。この拡張は、Visual Studio 2010以降で使用することができます。 まず、あなたはNugetの拡張機能をインストールする必要があります。あなたはここに従うことができます:

  • のVisual Studio 2010に、メニューに行く - >ツール
  • を選択拡張機能マネージャ
  • 検索ボックスにNuGetを入力して、オンラインギャラリーをクリックします。それは情報の取得を待っています...
  • 取り出さNuGetパッケージマネージャを選択し、[Download]をクリックします。それはダウンロードを待っています...
  • Visual Studioの拡張インストーラーNuGetパッケージマネージャでインストール]をクリックします。インストールが完了するのを待ちます。
  • [閉じる]をクリックし、「今すぐ再起動します。

第二に、今、あなたはSQLiteのをインストールすることができます:

  • メニューツール - に行く>のVisual Studioのライブラリパッケージマネージャ - >パッケージマネージャコンソールます。
  • そして、
  • コマンドは、インストール・パッケージSystem.Data.SQLiteをパッケージマネージャコンソールで実行されます。このような: パッケージマネージャコンソールでコマンドを実行してインストール・パッケージSystem.Data.SQLiteするます。

そして今、あなたはSystem.Data.SQLiteを使用することができます。

場合は、次の2つのフォルダのx64と、x86のを参照してください、これらのフォルダはSQLite.Interop.dllが含まれています。さて、これらのDLLのプロパティウィンドウに移動し、設定、ビルドアクションがコンテンツで、出力ディレクトリにコピーすることは、常にコピーされます。

だから、それは私の方法です。

ありがとう。 キム・カントーファム、 ホーチミン市、ベトナム。 メール:tho.phamkim@gmail.com

マニュアル負荷関連System.Data.SQLiteアセンブリは、これを解決することができます。

変更gatapiaの以下のようなコード:

    public static void LoadSQLLiteAssembly()
    {
        Uri dir = new Uri(Assembly.GetExecutingAssembly().CodeBase);
        FileInfo fi = new FileInfo(dir.AbsolutePath);
        string appropriateFile = Path.Combine(fi.Directory.FullName, GetAppropriateSQLLiteAssembly());
        Assembly.LoadFrom(appropriateFile);
    }

    private static string GetAppropriateSQLLiteAssembly()
    {
        string pa = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE");
        string arch = ((String.IsNullOrEmpty(pa) || String.Compare(pa, 0, "x86", 0, 3, true) == 0) ? "32" : "64");
        return "System.Data.SQLite.x" + arch + ".DLL";
    }

当社のWindowsサーバが64ビットに32ビットOSから変換されたときに

私はこのエラーを得ました。エラーをスローしたアセンブリは、x86のモード(すなわち、32モード)でコンパイルするように設定しました。私は「どれCPU」に切り替え、それはトリックをしました。あなたは、次の作業を実行して、この値を変更することができます:

プロジェクトを右クリックし、

Properties -> Build -> Platform Target -> change to "Any CPU"に行きます

当社の生産サーバーが

が欠落しているため、

私たちの場合は動作しませんでした

のMicrosoft Visual C ++ 2010 SP1再頒布可能パッケージ(x86)

私たちは、それをインストールし、すべてが正常に動作します。アプリケーションプールを持ってtrueに設定された32ビットアプリケーションを有効にする必要がありますし、次の作業を行う必要があり、ライブラリのx86バージョン

Iは、パッケージマネージャコンソールとは対照的に、Nuget GUIアプリケーションを介してSystem.Data.SQLiteをインストールすることにより、奇妙なことに、これを解決します。

コンソール経由でインストールするには、このライブラリを実行する必要がある依存関係が含まれていませんでした。

私は2つの迅速な解決策を思い付きました。どちらか私のために働きます。私は、問題は、権限のだと思います。

代わりにネット-2.0ディレクトリからElmah.dllファイルを使用しての

1)、私はネット-1.1からElmah.dllを使用します。

2)の代わりに、プロジェクトのbinディレクトリにElmah.dllを維持します。私はそれを置くためにDLLディレクトリを作成します。

これを回避する別の方法は、ELMAH 1.2ではなく1.1にアプリケーションをアップグレードするだけです。

System.Data.SQLiteSystem.Data.SQLite.interopへの依存性は、両方のパッケージが同じバージョンであり、両方があることを確認しているの x86のの。

この古い質問ですが、私は上記のすべてを試してみました。私は厳密の x86ののプロジェクトに取り組んでいたので、2つのフォルダ/ x86の、/ x64のではありませんでした。しかし、いくつかの理由で、System.Data.SQLiteSystem.Data.SQLite.interopするために、異なるバージョンでした、私は問題が修正されたDLLをマッチングプルダウン一度ます。

あなたはビンデバッグフォルダを削除して、もう一度再コンパイルすることはできますか?

またはリフレクタでDLLを開く、それがどこにあるか追跡、System.Data.SQLiteにプロジェクト参照を確認してください。あなたがそれを開くことができない場合、それはdllファイルが破損していることを意味し、あなたは正しいものを見つけるか、.NET Frameworkを再インストールすることをお勧めします。

あなたの開発マシン上のWebサーバーとしてIIS Expressを使用している場合は、

私は、ローカルIISに変更します。これは私のために働いています。

これは古い記事ですが、それは、このエラーに検索する一部の人々はアプリケーションプールのためにTrueに「有効32ビット・アプリケーション」を設定してみてくださいするのを助けることができます。それは私のために、エラーを解決するものです。私は@ beckelmwの回答にいくつかのコメントを読むことによって、この解に来ています。

あなたは可能性がインストールされ、間違ったパッケージを持っています。あなたはSystem.Data.Commonを実装して、Microsoftののnoreferrer">