NHibernate 3.3 и SysCache

Текущая версия 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<br> NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary2 properties) +3449 NHibernate.Cfg.Configuration.BuildSettings() +29 NHibernate.Cfg.Configuration.BuildSessionFactory() +44

Если я закомментирую конфигурацию в web.config, все будет хорошо:

<code><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>
</code>

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

 Baz1nga08 мая 2012 г., 04:54
вы используете FLuent Nhibernate?

Ответы на вопрос(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>

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

Решение Вопроса

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

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

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

Ваш ответ на вопрос