运行ServiceStack示例时出现System.BadImageFormatException。

时间:2011-01-11 11:25:37

标签: sqlite badimageformatexception servicestack

我正在尝试运行ServiceStack示例项目。当我运行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。

2 个答案:

答案 0 :(得分:10)

将主项目的平台目标设置为x86以解决此问题。这可以在 Project ... - >下完成。属性 - >构建

SqlLite很可能是一个32位组件,并且为了能够加载它,您的应用程序也需要是一个32位应用程序(64位进程无法加载32位组件,反之亦然)。

答案 1 :(得分:7)

尝试使用64位IIS / pc加载32位sqlite.dll时出现此问题。

要使其正常工作,您需要通过以下方式为您的AppDomain启用“32位应用程序”:

  1. 打开IIS管理器
  2. 点击“应用程序池”中的“高级设置”。
  3. 启用32位应用程序设置为true
  4. 要及时回复,请随时向ServiceStack Google Group发送与任何ServiceStack相关问题的链接。

    更新:我忘了添加:您还需要最顶层的项目(即您的ASP.NET Web应用程序)将其构建配置设置为x86(32位)。

    如果您下载 latest version of ServiceStack.Examples (v2.01) ,这应该可以在64位服务器上运行。

    可以跟踪有关此内容的更多信息:

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