gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:43:55 30 4
gpt4 key购买 nike

我正在尝试连接 NHibernate 以将 Enyim.Memcached 提供程序用于其二级缓存。此外,我希望 Enyim.Memcached 使用 protobuf-net 作为它的序列化程序。

查看 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'oh! 2.12 比 2.3 更新。 (感谢马克指出这一点!)

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

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

最佳答案

“只有 v2.12”——这让我愣了一下,但 2.12 比 2.3 更新得多; 2.7 是 2011 年 1 月; 2.12 是 2012 年 10 月。我似乎根本无法获得 2.3(即使通过命令行工具)。没有“只有 ... v2.12”这样的东西,因为在撰写本文时,v2.12 是最新版本

不过,我可以建议的最简单的事情是尝试手动构建 protobuf 转码器,直接引用 NHibernate 使用的任何版本。

enyim 工具似乎有些...奇怪;在野外至少有 2 个不同的版本(具有不同的强名称 IIRC) - 它们甚至具有略微不同的接口(interface)( Int16 vs Int32 在一些地方,和 Flag vs Flags ,从内存) . 可能 NHibernate 正在使用“其他”。我从 nuget 开始构建;但是 - 如果这是“错误”的,我很乐意重新评估。

编辑:

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

{path removed}\Enyim.Caching.dll does not represent a strongly named assembly

然后我尝试使用通过 Install-Package EnyimMemcached 从 nuget 下载的新版本,它给出:

Public key token is cec98615db04012e

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

这意味着这些 dll 将始终具有根本不同的身份,并且永远无法互换。可悲的是,我对此无能为力。如果您无法更新 NH,则必须针对非强名称 dll 在本地构建 protobuf 工具。如果您在构建它时遇到与缺少成员相关的问题 Flags ,尝试将本地代码更改为 Flag .

就我个人而言,添加、删除或更改公钥 token 值得进行“重大”修订更新——即升级到 3.0;因为这从根本上说是一个突破性的变化。

关于NHibernate.Caches.EnyimMemcached,protobuf-net.Enyim 想要 Enyim.Caching 的冲突版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14925607/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com