首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate 3.3和SysCache

NHibernate 3.3和SysCache
EN

Stack Overflow用户
提问于 2012-05-08 02:39:59
回答 2查看 7.8K关注 0票数 16

当前版本的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中的配置,一切都很好:

代码语言:javascript
复制
<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的下载站点没有最新版本的下载。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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。因为这是一个小的升级,不应该有任何的代码更改,你应该是安全的。

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

票数 8
EN

Stack Overflow用户

发布于 2012-05-16 21:40:52

另一种稍微简单一些的方法是在您的3.2app.config中重写对NHibernate版本的引用,并引用所需的版本3.3,如下所示:

代码语言:javascript
复制
<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>

我自己也试过了,效果和预期一样。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10491876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档