2012-05-08 15 views
16

La versión actual de SysCache no parece funcionar con NHibernate 3.3. Reemplacé las dlls de NHibernate en mi directorio web/bin y dejé intacto el dll de SysCache (que funciona con 3.2). Ahora, cuando IIS intenta realizar un enlace previo, carga el dll de SysCache e intenta vincularlo a NHibernate 3.2.0.4000 y falla.NHibernate 3.3 y SysCache

[FileLoadException: No se pudo cargar el archivo o ensamblado 'NHibernate, = Versión 3.2.0.4000, Culture = neutral, PublicKeyToken = aa95f207798dfdb4' o una de sus dependencias. La definición del manifiesto del conjunto ubicado no coincide con la referencia del ensamblado. (Excepción de HRESULT: 0x80131040)] System.RuntimeTypeHandle.GetTypeByName (String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, Boolean loadTypeFromPartialName, tipo ObjectHandleOnStack) 0
System.RuntimeTypeHandle.GetTypeByName (String nombre, 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 nombre, Boolean throwOnError) +338
NHibernate.Cfg.SettingsFactory.CreateCacheProvider (IDictionary`2 propiedades) 175

[HibernateException: no se pudo instanciar CacheProvider: NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache]
NHibernate.Cfg.SettingsFactory.CreateCacheProvider (IDictionary 2 properties) +256
NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary
2 propiedades) 3449 NHibernate.Cfg.Configuration .BuildSettings() +29 NHibernate.Cfg.Configuration.BuildSessionFactory() +44

Si comento a cabo la configuración en el web.config todo está bien: sitio

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

La descarga de cachés de NHibernate en NHibernate Contrib no tiene una descarga de la última versión.

+0

¿Está utilizando FLuent Nhibernate? – Baz1nga

Respuesta

8

El problema probablemente sea que el SysCache Dll está construido con NHibernate 3.2.0 y no es compatible con NHibernate 3.3.0. Una forma sencilla de solucionar esto es verificar el tronco del proyecto de configuración nhibernate o la solución de caché solo desde https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Caches actualizar la referencia de NHibernate para usar la versión que está utilizando y luego reconstruir y usar los últimos dlls de caché. Como es una actualización menor, no debería haber cambios de código necesarios y debe estar seguro.

Pruébalo y cuéntame cómo te va.

+0

En realidad, el proyecto en tronco referencia 3.0. Por lo tanto, la biblioteca que estaba ejecutando para 3.2 no debe haber sido compilada directamente desde esta fuente. De todos modos, lo descargué y lo volví a compilar sin ningún problema. Gracias por la sugerencia. –

27

Un enfoque diferente y un poco más sencillo es para anular la referencia a la versión 3.2 de NHibernate en su web.config o app.config con una referencia a la versión deseada 3.3 así:

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

He intentado esto yo mismo y funciona como se esperaba.