NHibernate 3.3和SysCache

时间:2012-05-08 02:39:59

标签: nhibernate syscache

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

  

[FileLoadException:无法加载文件或程序集'NHibernate,   Version = 3.2.0.4000,Culture = neutral,PublicKeyToken = aa95f207798dfdb4'   或其中一个依赖项。定位程序集的清单定义   与装配参考不匹配。 (HRESULT的例外情况:   0x80131040)] System.RuntimeTypeHandle.GetTypeByName(String name,   Boolean throwOnError,Boolean ignoreCase,Boolean reflectionOnly,   StackCrawlMarkHandle stackMark,Boolean loadTypeFromPartialName,   ObjectHandleOnStack类型)+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   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 properties) +256
NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary
2个属性)   +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缓存下载站点没有最新版本的下载。

2 个答案:

答案 0 :(得分:27)

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

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

答案 1 :(得分:8)

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

尝试一下,让我知道它是怎么回事。