3

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; }
}

上記のコードはコンパイルされますが、ServiceStack.OrmLite.SqliteNET がコンパイルされたものとは異なる System.Data.Sqlite バージョンを使用していることを示す実行時例外が発生します。NuGet から提供されたバージョンは 1.0.81.0 でしたが、ランタイム例外はバージョン 1.0.65.0 を探しているようです。

私は NuGet を初めて使用するので、何か間違ったことをした可能性がありますが、何が間違っているのかを判断できませんでした。助けていただければ幸いです。

4

2 に答える 2

2

ServiceStack.OrmLite.Sqlite* (packages.config 経由) の依存関係としてリストされている SQLite バージョンが NuGet で利用できなくなったときに発生した、ServiceStack と SQLite でまったく同じ経験をしました (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 に答える