NHibernate 3.3和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=aa95f207798dfdb4' 或其依赖项之一。定位的程序集的清单定义 与程序集引用不匹配。(HRESULT的异常: 0x8013100)]System.RuntimeTypeHandle.GetTypeByName(字符串名称, Boolean throwOnError、Boolean ignoreCase、Boolean reflectionOnly、, StackScrawMarkHandle stackMark,Boolean loadTypeFromPartialName, ObjectHandleOnStack类型)+0NHibernate 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
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运行的库一定不是直接从这个源代码编译的。不管怎样,我确实下载并重新编译了它,没有问题。谢谢你的建议。