NHibernate 3.3 и SysCache

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

[FileLoadException: Не удалось загрузить файл или сборку 'NHibernate, Версия =3.2.0.4000, Культура = нейтральная, PublicKeyToken=aa95f207798dfdb4' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)] System.RuntimeTypeHandle.GetTypeByName(имя строки, логическое значение throwOnError, логическое значение ignoreCase, логическое отражение, только StackCrawlMarkHandle stackMark, логическое значение loadTypeFromSarleName типа OhNeleFonePlayTone)
System.RuntimeTypeHandle.GetTypeByName (имя строки, логическое значение throwOnError, логическое значение ignoreCase, логическое отражение Only, StackCrawlMark& ​​stackMark, логическое значение loadTypeFromPartialName) +95
System.
NHibernate.Cfg.SettingsFactory.CreateCacheProvider(свойства IDictionary`2) +175

[HibernateException: не удалось создать экземпляр CacheProvider: NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache]
NHibernate.Cfg.SettingsFactory.CreateCacheProvider(IDictionary2 properties) +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>

На сайте загрузки кешей NHibernate в NHibernate Contrib нет загрузки последней версии.

2 ответа

Решение

Возможно, проблема в том, что 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.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>

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

Другие вопросы по тегам