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 не имеет загрузки для последней версии.
Ответы
Ответ 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>
Я просто пробовал это сам, и он работает так, как ожидалось.