我使用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,所以我可能做错了,但是我无法确定我做错了什么。将不胜感激。
答案 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是我系统上唯一可用的版本。