Skip to content

TypeLoadException in StaticProxyFactory after upgrading to 5.1.0 #1643

Closed
@matteosaporiti

Description

@matteosaporiti

Hi,
upgrading the following packages:
NHibernate 5.0.3 -> 5.1.0
Iesi.Collections 4.0.3 -> 4.0.4
Remotion.Linq.EagerFetching 2.1.0 -> 2.2.0
breaks my application (.NET 4.7, Nhibernate, Nhibernate Validator, NHibernate.AspNet.Identity).

The exception is the following

2018-04-06 10:57:25,821 [83] ERROR NHibernate.Proxy.StaticProxyFactory - Creating a proxy instance failed
System.TypeLoadException: Type 'ApplicationUserProxy' from assembly 'ApplicationUserProxyAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is attempting to implement an inaccessible interface.
at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)
at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
at System.Reflection.Emit.TypeBuilder.CreateTypeInfo()
at NHibernate.Proxy.NHibernateProxyBuilder.CreateProxyType(Type baseType, IReadOnlyCollection1 baseInterfaces) at NHibernate.Proxy.StaticProxyFactory.CreateProxyActivator(ProxyCacheEntry pke) at NHibernate.Proxy.StaticProxyFactory.<GetProxy>b__2_0(ProxyCacheEntry pke) at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func2 valueFactory) at NHibernate.Proxy.StaticProxyFactory.GetProxy(Object id, ISessionImplementor session) 2018-04-06 10:57:25,852 [83] ERROR MyProject.Domain.UnitOfWork.Factory.UnitOfWorkFactory - NHibernate.HibernateException: Creating a proxy instance failed ---> System.TypeLoadException: Type 'ApplicationUserProxy' from assembly 'ApplicationUserProxyAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is attempting to implement an inaccessible interface. at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type) at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock() at System.Reflection.Emit.TypeBuilder.CreateTypeInfo() at NHibernate.Proxy.NHibernateProxyBuilder.CreateProxyType(Type baseType, IReadOnlyCollection1 baseInterfaces)
at NHibernate.Proxy.StaticProxyFactory.CreateProxyActivator(ProxyCacheEntry pke)
at NHibernate.Proxy.StaticProxyFactory.b__2_0(ProxyCacheEntry pke)
at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func2 valueFactory)
at NHibernate.Proxy.StaticProxyFactory.GetProxy(Object id, ISessionImplementor session)
--- End of inner exception stack trace ---
at NHibernate.Proxy.StaticProxyFactory.GetProxy(Object id, ISessionImplementor session)
at NHibernate.Tuple.Entity.AbstractEntityTuplizer.CreateProxy(Object id, ISessionImplementor session)
at NHibernate.Persister.Entity.AbstractEntityPersister.CreateProxy(Object id, ISessionImplementor session)
at NHibernate.Event.Default.DefaultLoadEventListener.CreateProxyIfNecessary(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options, IPersistenceContext persistenceContext)
at NHibernate.Event.Default.DefaultLoadEventListener.ProxyOrLoad(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options)
at NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent event, LoadType loadType)
at NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType loadType)
at NHibernate.Impl.SessionImpl.InternalLoad(String entityName, Object id, Boolean eager, Boolean isNullable)
at NHibernate.Type.EntityType.ResolveIdentifier(Object id, ISessionImplementor session)
at NHibernate.Type.EntityType.ResolveIdentifier(Object value, ISessionImplementor session, Object owner)
at NHibernate.Engine.TwoPhaseLoad.InitializeEntity(Object entity, Boolean readOnly, ISessionImplementor session, PreLoadEvent preLoadEvent, PostLoadEvent postLoadEvent)
at NHibernate.Loader.Loader.InitializeEntitiesAndCollections(IList hydratedObjects, Object resultSetId, ISessionImplementor session, Boolean readOnly)
at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies, IResultTransformer forcedResultTransformer)
at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies, IResultTransformer forcedResultTransformer)
at NHibernate.Loader.Loader.LoadEntity(ISessionImplementor session, Object id, IType identifierType, Object optionalObject, String optionalEntityName, Object optionalIdentifier, IEntityPersister persister)
at NHibernate.Loader.Entity.AbstractEntityLoader.Load(ISessionImplementor session, Object id, Object optionalObject, Object optionalId)
at NHibernate.Loader.Entity.AbstractEntityLoader.Load(Object id, Object optionalObject, ISessionImplementor session)
at NHibernate.Persister.Entity.AbstractEntityPersister.Load(Object id, Object optionalObject, LockMode lockMode, ISessionImplementor session)
at NHibernate.Event.Default.DefaultLoadEventListener.LoadFromDatasource(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options)
at NHibernate.Event.Default.DefaultLoadEventListener.DoLoad(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options)
at NHibernate.Event.Default.DefaultLoadEventListener.Load(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options)
at NHibernate.Event.Default.DefaultLoadEventListener.ProxyOrLoad(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options)
at NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent event, LoadType loadType)
at NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType loadType)
at NHibernate.Impl.SessionImpl.Get(String entityName, Object id)
at NHibernate.Impl.SessionImpl.Get[T](Object id)
at MyProject.Domain.Repository.BaseRepository2.GetById(TKey id) in C:\Users\Matteo\Documents\Projects\MyProject\MyProject.Domain\Repository\BaseRepository.cs:line 18 at MyProject.Services.Implementations.RefreshTokenService.<>c__DisplayClass2_0.<GetToken>b__0(IBaseUnitOfWork uok, IRepositoryFactory repoFactory) in C:\Users\Matteo\Documents\Projects\MyProject\MyProject.Services\Implementations\RefreshTokenService.cs:line 50 at MyProject.Domain.UnitOfWork.Factory.BaseUnitOfWorkFactory.Create(Action2 action, Func`2 exceptionHandling) in C:\Users\Matteo\Documents\Projects\MyProject\MyProject.Domain\UnitOfWork\Factory\UnitOfWorkFactory.cs:line 28

The ApplicationUser entity is
public class ApplicationUser : NHibernate.AspNet.Identity.IdentityUser { //my properties }

Everything is working correctly with 5.0.3.
I didn't find anything useful in the release notes, is there something that needs to be changed or looked at when upgrading to 5.1?

Thanks in advance

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions