Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NHibernate 3.3和SysCache_Nhibernate_Syscache - Fatal编程技术网

NHibernate 3.3和SysCache

NHibernate 3.3和SysCache,nhibernate,syscache,Nhibernate,Syscache,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=aa95f207798dfdb

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的异常: 0x8013100)]System.RuntimeTypeHandle.GetTypeByName(字符串名称, Boolean throwOnError、Boolean ignoreCase、Boolean reflectionOnly、, StackScrawMarkHandle stackMark,Boolean loadTypeFromPartialName, ObjectHandleOnStack类型)+0
System.RuntimeTypeHandle.GetTypeByName(字符串名称,布尔值 throwOnError、布尔ignoreCase、布尔reflectionOnly、, stackcrawmark和stackMark,Boolean loadTypeFromPartialName)+95
System.RuntimeType.GetType(字符串typeName,布尔throwOnError, 布尔ignoreCase、布尔反射only、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
属性)+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>
true
真的
NHibernate.Caches.SysCache.SysCacheProvider,NHibernate.Caches.SysCache

位于的NHibernate缓存下载站点没有最新版本的下载。

问题可能是系统缓存Dll是使用NHibernate 3.2.0构建的,它与NHibernate 3.3.0不兼容。解决此问题的一个简单方法是仅从以下位置签出nhibernate配置项目的主干或缓存解决方案: 更新NHibernate引用以使用您正在使用的版本,然后重新生成并使用最新的缓存DLL。因为这是一个小的升级,所以不需要任何代码更改,您应该是安全的


尝试一下,让我知道它是如何运行的。

另一种稍微简单一点的方法是在
web.config
app.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>


我自己也试过了,效果很好。

您使用的是FLuent Nhibernate吗?实际上,trunk references 3.0中的项目。所以我为3.2运行的库一定不是直接从这个源代码编译的。不管怎样,我确实下载并重新编译了它,没有问题。谢谢你的建议。