16

当前版本的 SysCache 似乎不适用于 NHibernate 3.3。我替换了我的 web/bin 目录中的 NHibernate dll,并保持 SysCache dll(适用于 3.2)不变。现在,当 IIS 尝试进行预绑定时,它会加载 SysCache dll 并尝试将其绑定到 NHibernate 3.2.0.4000 并失败。

[FileLoadException:无法加载文件或程序集“NHibernate,版本=3.2.0.4000,文化=中性,PublicKeyToken=aa95f207798dfdb4”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT 异常:0x80131040)] System.RuntimeTypeHandle.GetTypeByName(字符串名称,布尔 throwOnError,布尔 ignoreCase,布尔反射,StackCrawlMarkHandle stackMark,布尔 loadTypeFromPartialName,ObjectHandleOnStack 类型)+0
System.RuntimeTypeHandle.GetTypeByName(字符串名称,布尔 throwOnError,布尔ignoreCase,布尔反射,StackCrawlMark 和 stackMark,布尔 loadTypeFromPartialName) +95
System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark) +54 System.Type.GetType(String typeName) +50 NHibernate.Util.ReflectHelper.TypeFromAssembly(AssemblyQualifiedTypeName name, Boolean throwOnError) +338
NHibernate.Cfg.SettingsFactory.CreateCacheProvider(IDictionary`2 属性)+175

[HibernateException: 无法实例化 CacheProvider: NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache]
NHibernate.Cfg.SettingsFactory.CreateCacheProvider(IDictionary 2 属性) +3449 NHibernate.Cfg.Configuration.BuildSettings() +29 NHibernate.Cfg .Configuration.BuildSessionFactory() +442 properties) +256
NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary

如果我注释掉 web.config 中的配置,一切都很好:

<property name="cache.use_second_level_cache">true</property>
<property name="cache.use_query_cache" >true</property>
<property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>

NHibernate Contrib上的 NHibernate 缓存下载站点没有最新版本的下载。

4

2 回答 2

27

一种不同且稍微简单的方法是覆盖对3.2您的 NHibernate 版本的引用,web.config或者app.config使用对所需版本的引用,3.3如下所示:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="NHibernate" culture="neutral" publicKeyToken="aa95f207798dfdb4" />
      <bindingRedirect newVersion="3.3.0.4000" oldVersion="0.0.0.0-3.3.0.4000" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

我自己刚刚尝试过,它按预期工作。

于 2012-05-16T21:40:52.687 回答
8

问题可能是 SysCache Dll 是使用 NHibernate 3.2.0 构建的,它与 NHibernate 3.3.0 不兼容。解决此问题的一种简单方法是仅从https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Caches检出 nhibernate 配置项目的主干或缓存解决方案, 更新 NHibernate 参考以使用您正在使用的版本,然后重建并使用最新的缓存 dll。由于它是一个小升级,因此不需要任何代码更改,您应该是安全的。

试试看,让我知道它是怎么回事。

于 2012-05-08T03:21:27.447 回答