NHibernate 3.3 and SysCache



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

[文件加载

异常:无法加载文件或程序集"NHibernate, 版本=3.2.0.4000,区域性=中性,公钥令牌=aa95f207798dfdb4' 或其依赖项之一。找到的程序集的清单定义 与程序集引用不匹配。(HRESULT的例外情况: 0x80131040(] System.RuntimeTypeHandle.GetTypeByName(String name, 布尔抛出错误, 布尔忽略大小写, 布尔反射仅, StackCrawlMarkHandle stackMark, Boolean loadTypeFromPartialName, ObjectHandleOnStack type( +0
System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, boolean ignoreCase, boolean reflectionOnly, StackCrawlMark&stackMark, Boolean 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 名称,布尔抛出错误( +338
NHibernate.Cfg.SettingsFactory.CreateCacheProvider(IDictionary'2 属性( +175

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

如果我注释掉 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 缓存下载站点没有最新版本的下载。

另一种稍微简单的方法是在web.configapp.config中覆盖对 NHibernate 3.2版本的引用,引用所需的版本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>

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

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

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

最新更新