2011-01-11 63 views
7

我试图运行ServiceStack示例项目。当我运行的Web客户端我收到以下错误:运行ServiceStack示例的System.BadImageFormatException。

{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。

回答

10

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

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

+0

我已经试过**任何CPU **,** ** 86,但仍然得到同样的错误:

关于这方面更多的信息可以被追踪。 – TheVillageIdiot 2011-01-12 06:40:29

7

当试图加载64位IIS/PC的32位sqlite.dll时,这是一个问题。

得到它的工作,你需要“启用32位应用程序”为您的AppDomain是:在你的应用程序池

  1. 开放IIS管理器
  2. 点击“高级设置”。
  3. 启用32位应用程序

对于响应更及时随意链接到任何ServiceStack相关的问题发送到ServiceStack Google Group

更新:我忘了补充:您还需要您的最高级别项目(即您的ASP.NET Web应用程序)将其生成配置设置为x86(32位)。

如果你下载latest version of ServiceStack.Examples (v2.01)这现在应该在64位服务器上工作。

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