当前版本的SysCache似乎不适用于NHibernate 3.3。我在我的web/bin目录中替换了NHibernate dll,并保留了SysCache dll(该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(字符串名、布尔throwOnError、布尔ignoreCase、布尔reflectionOnly、StackCrawlMarkHandle stackMark、布尔loadTypeFromPartialName、ObjectHandleOnStack类型) +0
System.RuntimeTypeHandle.GetTypeByName(字符串名、布尔throwOnError、布尔ignoreCase、布尔reflectionOnly、StackCrawlMark& stackMark、布尔loadTypeFromPartialName) +95
NHibernate.Util.ReflectHelper.TypeFromAssembly(AssemblyQualifiedTypeName System.RuntimeType.GetType(String typeName,Boolean,Boolean,Boolean,StackCrawlMark& stackMark) +54 System.Type.GetType(String typeName) +50 throwOnError,布尔throwOnError) +338
( NHibernate.Cfg.SettingsFactory.CreateCacheProvider(IDictionary2 properties) +175 [HibernateException: could not instantiate CacheProvider: NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache] NHibernate.Cfg.SettingsFactory.CreateCacheProvider(IDictionary2属性) +256NHibernate.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缓存在NHibernate Contrib的下载站点没有最新版本的下载。
发布于 2012-05-08 03:21:27
问题可能是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-16 21:40:52
另一种稍微简单一些的方法是在您的3.2或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>我自己也试过了,效果和预期一样。
https://stackoverflow.com/questions/10491876
复制相似问题