NHibernate 3.3 и SysCache - программирование
Подтвердить что ты не робот

NHibernate 3.3 и SysCache

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

[FileLoadException: не удалось загрузить файл или сборку NHibernate, Версия = 3.2.0.4000, Культура = нейтральная, PublicKeyToken = aa95f207798dfdb4 ' или одной из его зависимостей. Установленное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)] System.RuntimeTypeHandle.GetTypeByName(имя строки, 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(IDictionary 2 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 не имеет загрузки для последней версии.

4b9b3361

Ответ 1

Вероятно, проблема заключается в том, что 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 файлы кэша. Поскольку его незначительное обновление не должно содержать никаких изменений кода, и вы должны быть в безопасности.

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

Ответ 2

Другой и немного более простой подход заключается в том, чтобы переопределить ссылку на версию 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>

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