Tengo algunos proyectos basados en NHibernate 1.2 y me gustaría agregarlos a una solución .NET 4.0, pero obtengo una AmbiguousMatchException.
No importa si estos proyectos están dirigidos al marco 2.0 o 4.0.
Funciona si los agrego a una solución .NET 3.5.NHibernate 1.2 en una solución .NET 4.0
¿Alguien tiene experiencia con eso?
Aquí es la excepción:
[AmbiguousMatchException: Ambiguous match found.]
System.RuntimeType.GetMethodImpl(String name, BindingFlags bindingAttr, Binder binder, CallingConventions callConv, Type[] types, ParameterModifier[] modifiers) +9607924
System.Type.GetMethod(String name) +29
Castle.DynamicProxy.Builder.CodeBuilder.SimpleAST.LockBlockExpression.Emit(IEasyMember member, ILGenerator gen) +192
Castle.DynamicProxy.Builder.CodeBuilder.SimpleAST.ExpressionStatement.Emit(IEasyMember member, ILGenerator gen) +52
Castle.DynamicProxy.Builder.CodeBuilder.AbstractCodeBuilder.Generate(IEasyMember member, ILGenerator il) +370
Castle.DynamicProxy.Builder.CodeBuilder.EasyMethod.Generate() +71
Castle.DynamicProxy.Builder.CodeBuilder.AbstractEasyType.EnsureBuildersAreInAValidState() +706
Castle.DynamicProxy.Builder.CodeBuilder.AbstractEasyType.BuildType() +90
Castle.DynamicProxy.Builder.CodeGenerators.BaseCodeGenerator.CreateType() +55
Castle.DynamicProxy.Builder.CodeGenerators.ClassProxyGenerator.GenerateCode(Type baseClass, Type[] interfaces) +573
Castle.DynamicProxy.Builder.DefaultProxyBuilder.CreateClassProxy(Type theClass, Type[] interfaces) +87
Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type baseClass, Type[] interfaces, IInterceptor interceptor, Boolean checkAbstract, Object[] argumentsForConstructor) +116
NHibernate.Proxy.CastleProxyFactory.GetProxy(Object id, ISessionImplementor session) +136
[HibernateException: Creating a proxy instance failed]
NHibernate.Proxy.CastleProxyFactory.GetProxy(Object id, ISessionImplementor session) +270
NHibernate.Persister.Entity.AbstractEntityPersister.CreateProxy(Object id, ISessionImplementor session) +17
NHibernate.Impl.SessionImpl.DoLoadByClass(Type clazz, Object id, Boolean checkDeleted, Boolean allowProxyCreation) +354
NHibernate.Impl.SessionImpl.InternalLoad(Type clazz, Object id, Boolean eager, Boolean isNullable) +52
NHibernate.Type.EntityType.ResolveIdentifier(Object id, ISessionImplementor session) +37
NHibernate.Type.EntityType.ResolveIdentifier(Object id, ISessionImplementor session, Object owner) +55
NHibernate.Impl.SessionImpl.InitializeEntity(Object obj) +187
NHibernate.Loader.Loader.InitializeEntitiesAndCollections(IList hydratedObjects, Object resultSetId, ISessionImplementor session) +229
NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) +702
NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) +62
NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) +51
NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session, QueryParameters queryParameters) +18
NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet querySpaces, IType[] resultTypes) +81
NHibernate.Loader.Criteria.CriteriaLoader.List(ISessionImplementor session) +36
NHibernate.Impl.SessionImpl.Find(CriteriaImpl criteria, IList results) +315
NHibernate.Impl.SessionImpl.Find(CriteriaImpl criteria) +66
NHibernate.Impl.CriteriaImpl.List() +54
[my code calling Criteria.List()]
Deberá depurarlo para encontrar una coincidencia ambigua de qué. Si esto es realmente algo de .NET 4, parece que Castle está usando el método de reflexión para buscar un método .NET específico en el tiempo de ejecución sin una lista de argumentos y que .NET 4 ahora proporciona múltiples sobrecargas de ese método (!). Si puede depurar en NHibernate y/o Castle (es decir, si tiene PDB, o si los construyó usted mismo), esto debería ser bastante sencillo. – Rup
Rup, tienes razón. He visto en [1] que Castle está buscando Monitor.Enter, pero desde .NET 4.0 ese método tiene 2 firmas. No puedo encontrar las fuentes de Castle DynamicProxy 1.1.5, no puedo volver a compilarlo. Gracias de todos modos. [1] http://www.symbolsource.org/Public/Metadata/Project/Castle/1.0-RC3/Debug/All/Castle.DynamicProxy/Castle.DynamicProxy/Builder/CodeBuilder/SimpleAST/LockBlockExpression.cs – ssambi
usted puede obtener el código antiguo de Castle aquí: http://github.com/castleproject/castle –