7

ServiceStack Examples プロジェクトを実行しようとしています。Web クライアントを実行すると、次のエラーが表示されます。

{System.BadImageFormatException: An attempt was made to load a program with an 
    incorrect format. (Exception from HRESULT: 0x8007000B)
    at Mono.Data.Sqlite.UnsafeNativeMethods.sqlite3_open_v2(Byte[] utf8Filename, 
    IntPtr& db, Int32 flags, IntPtr vfs)
    at Mono.Data.Sqlite.SQLite3.Open(String strFilename, SQLiteOpenFlagsEnum 
    flags, Int32 maxPoolSize, Boolean usePool)
    at Mono.Data.Sqlite.SqliteConnection.Open()
    at ServiceStack.OrmLite.OrmLiteConnection.Open()
    at ServiceStack.OrmLite.OrmLiteConnectionFactory.OpenDbConnection()
    at ServiceStack.Examples.ServiceInterface.Support.ConfigureDatabase
         .Init(IDbConnectionFactory connectionFactory) 
    in E:\ServiceStack.Examples\src\ServiceStack.Examples\
    ServiceStack.Examples.ServiceInterface\Support\ConfigureDatabase.cs:line 23}

最新の System.Data.SQLite.dll ファイルをダウンロードして使用しようとしましたが、それでも同じエラーが発生します。Windows 7 64 ビット ボックスで 64 ビット VS2010 を実行しています。

4

2 に答える 2

10

これを修正するには、メイン プロジェクトのプラットフォーム ターゲットを x86 に設定します。これはProject... -> Properties -> Buildで実行できます。

SqlLite はほとんどの場合 32 ビット コンポーネントであり、それをロードできるようにするには、アプリケーションも 32 ビット アプリケーションである必要があります (64 ビット プロセスは 32 ビット コンポーネントをロードできず、その逆も同様です)。

于 2011-01-11T11:29:24.610 に答える
7

これは、32 ビットの sqlite.dll を 64 ビットの IIS/pc でロードしようとすると問題になります。

それを機能させるには、次の方法で AppDomain の「32 ビット アプリケーションを有効にする」必要があります。

  1. IIS マネージャーを開く
  2. アプリケーション プールの [詳細設定] をクリックします。
  3. [32 ビット アプリケーションを有効にする] を true に設定します。

よりタイムリーな回答が必要な場合は、ServiceStack 関連の質問へのリンクをServiceStack Google グループに送信してください。

更新: 追加するのを忘れていました: ビルド構成を x86 (32 ビット) に設定するには、最上位プロジェクト (つまり、ASP.NET Web アプリケーション) も必要です。

ServiceStack.Examples (v2.01)の最新バージョンをダウンロードすると、64 ビット サーバーで動作するはずです。

これに関する詳細は、以下で追跡できます。

https://groups.google.com/d/topic/servicestack/EUPqF2jI4ig/discussion

于 2011-01-25T13:42:02.370 に答える