Tôi có một số dự án dựa trên NHibernate 1.2 và tôi muốn thêm chúng vào một giải pháp .NET 4.0, nhưng tôi nhận được một AmbiguousMatchException.
Không có vấn đề gì nếu các dự án này được nhắm mục tiêu đến khung 2.0 hoặc 4.0.
Nó hoạt động nếu tôi thêm chúng vào một giải pháp .NET 3.5.NHibernate 1.2 trong một giải pháp .NET 4.0
Có ai có kinh nghiệm với điều đó không?
Đây là ngoại lệ:
[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()]
Bạn sẽ cần phải gỡ lỗi để tìm ra một kết quả không rõ ràng về những gì. Nếu điều này thực sự là một điều .NET 4, có vẻ như Castle đang sử dụng sự phản chiếu để tìm kiếm một phương thức .NET cụ thể trong thời gian chạy mà không có danh sách arg và .NET 4 giờ đây cung cấp nhiều quá tải của phương thức đó (!). Nếu bạn có thể gỡ lỗi vào NHibernate và/hoặc Castle (nghĩa là nếu bạn đã có PDB, hoặc nếu bạn tự xây dựng chúng), điều này sẽ khá đơn giản. – Rup
Rup, bạn nói đúng. Tôi đã thấy rằng Castle đang tra cứu Monitor.Enter, nhưng từ .NET 4.0, phương thức này có 2 chữ ký. Tôi không thể tìm thấy nguồn của Castle DynamicProxy 1.1.5, tôi không thể biên dịch lại nó. Cảm ơn bạn anyway. [1] http://www.symbolsource.org/Public/Metadata/Project/Castle/1.0-RC3/Debug/All/Castle.DynamicProxy/Castle.DynamicProxy/Builder/CodeBuilder/SimpleAST/LockBlockExpression.cs – ssambi
bạn có thể lấy mã cũ của Castle ở đây: http://github.com/castleproject/castle –