3

我在 .NET 4.5 下运行 VS 2012 Desktop Express。通过 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 的新手,所以我可能做错了什么,但是我无法确定我做错了什么。协助将不胜感激。

4

2 回答 2

2

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

于 2012-11-20T18:12:21.093 回答
2

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

<?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 是我系统上唯一可用的版本,也会出错。

于 2013-03-22T16:25:55.317 回答