Вопрос по nhibernate – NHibernate 3.3 и SysCache

16

Текущая версия SysCache не работает с NHibernate 3.3. Я заменил библиотеки NHibernate в своем каталоге web / bin и оставил библиотеку SysCache (которая работает с 3.2) без изменений. Теперь, когда IIS пытается выполнить предварительную привязку, он загружает DLL-файл SysCache и пытается привязать его к NHibernate 3.2.0.4000 и завершается неудачно.

[FileLoadException: Could not load file or assembly 'NHibernate, Version=3.2.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)] System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, Boolean loadTypeFromPartialName, ObjectHandleOnStack type) +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 properties) +175

[HibernateException: could not instantiate CacheProvider: NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache]
NHibernate.Cfg.SettingsFactory.CreateCacheProvider(IDictionary2 properties) +256
NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary
2 properties) +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 не имеет загрузки для последней версии.

вы используете FLuent Nhibernate? Baz1nga

Ваш Ответ

2   ответа
27

ылки на3.2 версия NHibernate в вашемweb.config или жеapp.config со ссылкой на нужную версию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>

Я только что попробовал это сам, и он работает, как и ожидалось.

8

вероятно, заключается в том, что SysCache Dll построен с использованием NHibernate 3.2.0 и не совместим с NHibernate 3.3.0. Простой способ обойти это - извлекать ствол из проекта конфигурации nhibernate или решения Cache только изhttps://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Caches обновите ссылку NHibernate, чтобы использовать версию, которую вы используете, а затем пересоберите и используйте последние DLL-файлы кэша. Поскольку это незначительное обновление, никаких изменений кода не требуется, и вы должны быть в безопасности.

Попробуйте и дайте мне знать, как это происходит.

Собственно, проект в магистральных ссылках 3.0. Таким образом, библиотека, которую я запускал для 3.2, не должна быть скомпилирована напрямую из этого источника. Во всяком случае, я загрузил его и перекомпилировал без проблем. Спасибо за предложение. Andrew Wheeler

Похожие вопросы