无法获得ServiceStack.OrmLite.Sqlite64示例工作

时间:2012-11-20 00:37:32

标签: sqlite servicestack ormlite-servicestack

我使用VS 2012 Desktop Express在.NET 4.5下运行。通过NuGet,我抓住了ServiceStack和ServiceStack.OrmLite.Sqlite64。然后我使用位于http://code.google.com/p/servicestack/wiki/OrmLite的非常简单的示例来编写以下内容。

class Program {
    static void Main(string[] args) {
        OrmLiteConfig.DialectProvider = new SqliteOrmLiteDialectProvider();
        using (IDbConnection db = @"C:\test.s3db".OpenDbConnection()) {
            db.CreateTable<Example>(true);
            db.Insert(new Example { Id = 1, Text = "An example" });

            var items = db.Select<Example>();

            items.ForEach(x => Console.WriteLine(x.Id + "\t" + x.Text));
        }
    }
}

public class Example {
    public int Id { get; set; }
    public string Text { get; set; }
}

上面的代码编译但是我得到一个运行时异常,似乎表明我使用的System.Data.Sqlite版本与ServiceStack.OrmLite.SqliteNET编译的版本不同。 NuGet提供给我的版本是1.0.81.0,而运行时异常似乎是在寻找版本1.0.65.0。

我是新手使用NuGet,所以我可能做错了,但是我无法确定我做错了什么。将不胜感激。

2 个答案:

答案 0 :(得分:2)

我注意到NuGet包ServiceStack.OrmLite.Sqlite64今天更新了。安装最新的软件包后,该示例按预期工作。它似乎是由导致我的问题的软件包提供的System.Data.Sqlite的错误版本。

答案 1 :(得分:2)

我与ServiceStack和SQLite有过完全相同的体验,当在NuGet上不再提供作为ServiceStack.OrmLite.Sqlite *(通过packages.config)的依赖项列出的SQLite版本时(因为SQLite人员)似乎在添加新版本时删除旧版本)。我已经向ServiceStack提交了过去的pull请求以保持更新,但也能够使用程序集绑定重定向在本地解决它:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Data.SQLite"
                      publicKeyToken="db937bc2d44ff139"
                      culture="neutral" />
        <bindingRedirect oldVersion="1.0.82.0" newVersion="1.0.84.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

以上,在App.config文件中,让我的单元测试程序集将ServiceStack的SQLite 1.0.82(它所期望的)的运行时绑定请求重定向到1.0.84(这是NuGet上可用的版本),从而它运行没有错误,即使1.0.84是我系统上唯一可用的版本。