NHibernate.Caches.EnyimMemcached,protobuf-net.Enyim想要Enyim.Caching的冲突版本

时间:2013-02-17 20:17:29

标签: nhibernate memcached protobuf-net enyim.caching

我正在尝试连接NHibernate以使用Enyim.Memcached提供程序进行二级缓存。另外,我希望Enyim.Memcached使用protobuf-net作为序列化器。

看看nuget和网络,我可以找到我需要的所有部分:

的NuGet:

  • protobuf-net.Enyim
  • protobuf-net(protobuf-net.Enyim的依赖)
  • EnyimMemcached (Enyim.Caching) v2.12(protobuf-net.Enyim的依赖)

幅: (http://sourceforge.net/projects/nhcontrib/files/NHibernate.Caches/ - 我找不到NHibernate.Caches.EnyimMemcached的nuget包)

  • NHibernate.Caches.EnyimMemcached
  • Enyim.Caching v2.3

然而,当我连接所有内容时,我收到The located assembly's manifest definition does not match the assembly reference.错误。问题似乎是:

  • NHibernate.Caches.EnyimMemcached想要Enyim.Caching v2.3
  • protobuf-net.Enyim想要Enyim.Caching v2.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'哦! 2.12 比2.3更近。 (感谢你指出马克!)

有什么想法?有一个我不知道的NHibernate.Caches.EnyimMemcached nuget包吗?还是使用2.3而不是2.12的protobuf-net.Enyim?我无法想象我是唯一一个试图使用这个NHibernate-Enyim-Protobuf-net堆栈的人。我很惊讶装配绑定重定向没有解决问题。

更新:我很乐意遵循Marc的建议。我只是下载了NHibernate.Caches.EnyimMemcached的源代码,并将其Enyim.Caching引用从unsigned v2.3程序集更改为签名的2.12程序集。一切都很好吃!

1 个答案:

答案 0 :(得分:3)

“只有v2.12” - 这让我在那里绊了一秒钟,但2.12比2.3更新近; 2.7是2011年1月; 2.12是2012年10月。我似乎根本无法获得2.3(甚至通过命令行工具)。没有“只有... v2.12”之类的东西,因为在撰写本文时,v2.12 是最新的版本

我可以建议的最简单的方法是尝试手动构建protobuf代码转换器,直接引用NHibernate使用的任何版本。

围绕enyim工具似乎有一些...... 奇怪;野外至少有两个不同的版本(具有不同的强名称IIRC) - 它们甚至在一些地方的界面略有不同(Int16Int32Flag vs { {1}},来自记忆)。 可能是NHibernate正在使用“其他”的。我从nuget那里开始构建;但是 - 如果这是“错误的”,我很乐意重新评估。

编辑:

我从您的链接下载了NHCH-3.2.0.GA-bin.zip,并使用Flags检查公钥;这给了:

  

{path removed} \ Enyim.Caching.dll不代表强名称程序集

然后我尝试使用通过sn -T <path>从nuget新下载的版本,这样做了:

  

公钥令牌是cec98615db04012e

所以基本上,在2.3和2.12之间的某个时刻,它已经开始使用强名称。

这意味着这些dll将始终具有根本不同的身份,永远不可互换。遗憾的是,我对此无能为力。如果你无法更新NH,那么你将不得不针对非强名称的dll进行protobuf工具的本地构建。如果您在构建与缺少的成员Install-Package EnyimMemcached相关的问题时遇到问题,请尝试将代码本地更改为Flags

就个人而言,如果是我,添加,删除或更改公钥令牌是值得进行“主要”修订更新 - 即转到3.0;因为那基本上是一个突破性的变化。