当前版本的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(IDictionary2 properties) +256
2个属性) +3449 NHibernate.Cfg.Configuration.BuildSettings()+29 NHibernate.Cfg.Configuration.BuildSessionFactory()+44
NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary
如果我在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缓存下载站点没有最新版本的下载。
答案 0 :(得分:27)
另一种稍微简单的方法是覆盖3.2
或web.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。由于它是次要升级,因此不需要进行任何代码更改,您应该是安全的。
尝试一下,让我知道它是怎么回事。