3

NHibernateを接続して、第2レベルのキャッシュにEnyim.Memcachedプロバイダーを使用しようとしています。さらに、Enyim.Memcachedでprotobuf-netをシリアライザーとして使用するようにします。

nugetとWebを見ると、必要なほとんどすべての要素を見つけることができます。

nuget:

  • protobuf-net.Enyim
  • protobuf-net (protobuf-net.Enyimの依存関係)
  • EnyimMemcached (Enyim.Caching)v2.12(protobuf-net.Enyimの依存関係)

web:(http://sourceforge.net/projects/nhcontrib/files/NHibernate.Caches/-NHibernate.Caches.EnyimMemcachedのnugetパッケージが見つかりませんでした)

  • NHibernate.Caches.EnyimMemcached
  • Enyim.Cachingv2.3

ただし、すべてを配線すると、The located assembly's manifest definition does not match the assembly reference.エラーが発生します。問題は次のようです。

  • NHibernate.Caches.EnyimMemcachedEnyim.Cachingv2.3が欲しい
  • protobuf-net.EnyimEnyim.Cachingv2.12が欲しい

彼らはうまくプレーしません。アセンブリリダイレクトを追加しようとしましたが、役に立ちませんでした。

  <dependentAssembly>
    <assemblyIdentity name="Enyim.Caching" publicKeyToken="cec98615db04012e" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.3.0.0" newVersion="2.3.0.0" />
  </dependentAssembly>

「最新の」Enyim.Cachingアセンブリ(EnyimMemcachedパッケージを介して)にはv2.12しかありません。D'oh!2.122.3よりも新しいです。(マークを指摘してくれてありがとう!)

何かご意見は?私が知らないNHibernate.Caches.EnyimMemcachednugetパッケージはありますか?または、2.12ではなく2.3を使用するprotobuf-net.Enyim?このNHibernate-Enyim-Protobuf-netスタックを使おうとしたのは私だけだとは想像できません。そして、アセンブリバインディングリダイレクトが問題を修正しなかったことに驚いています。

更新:マークのアドバイスに従って行ってよかったです。NHibernate.Caches.EnyimMemcachedのソースをダウンロードし、そのEnyim.Caching参照を署名されていないv2.3アセンブリから署名された2.12アセンブリに変更しただけです。すべてが肉汁です!

4

1 に答える 1

3

「v2.12しかありません」-これは私を少しつまずかせましたが、2.12は2.3よりはるかに新しいです。2.7は2011年1月です。2.12は2012年10月です。(コマンドラインツールを使用しても)2.3をまったく取得できないようです。「...v2.12のみ」のようなものはありません。これは、執筆時点では、v2.12が最新バージョンであるためです。

ただし、私が提案できる最も簡単なことは、NHibernateが動作するバージョンを直接参照して、protobufトランスコーダーを手動で構築してみることです。

enyimツールを取り巻く奇妙な点があるようです。野生には少なくとも2つの異なるバージョンがあります(異なる強い名前IIRCを使用)-そしてそれらはわずかに異なるインターフェースを持っています(Int16vsInt32いくつかの場所で、Flagvs Flags、メモリから)。NHibernateが「他の」ものを使用している可能性があります。nugetからのビルドを使用しました。しかし、これが「間違った」ものである場合は、それを再評価できてうれしいです。

編集:

リンクからNHCH-3.2.0.GA-bin.zipをダウンロードしsn -T <path>、公開鍵の確認に使用しました。これは与える:

{パスが削除されました}\Enyim.Caching.dllは、厳密に名前が付けられたアセンブリを表していません

次に、nugetからを介して新たにダウンロードしたバージョンでこれを試しましたInstall-Package EnyimMemcached

公開鍵トークンはcec98615db04012eです

つまり、基本的には、2.3から2.12の間のある時点で、強い名前が使用され始めています。

これは、これらのdllが常に根本的に異なるIDを持ち、互換性がないことを意味します。悲しいことに、それについては何もできません。NHを更新できない場合は、厳密に名前が付けられていないdllに対してprotobufツールのローカルビルドを実行する必要があります。欠落しているメンバーに関連してビルドで問題が発生した場合はFlags、コードをローカルでに変更してみてくださいFlag

個人的には、公開鍵トークンを追加、削除、または変更することは、「メジャー」リビジョンの更新に値します。つまり、3.0に移行します。それは根本的に壊滅的な変化だからです。

于 2013-02-17T20:28:23.717 に答える