NHibernate 1.2를 기반으로하는 몇 가지 프로젝트가 있으며이를 .NET 4.0 솔루션에 추가하고 싶습니다. 그러나 AmbiguousMatchException이 발생합니다.
이 프로젝트가 2.0 또는 4.0 프레임 워크를 대상으로하는지 여부에 관계없이
.NET 3.5 솔루션에 추가하면 작동합니다..NET 4.0 솔루션에서 NHibernate 1.2
누구나 그 경험이 있습니까?
[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()]
무엇을 모호하게 일치 시키려면 디버깅해야합니다. 이것이 실제로 .NET 4 일 경우, Castle이 리플렉션을 사용하여 런타임에 arg 목록없이 특정 .NET 메소드를 조회하고 .NET 4가 해당 메소드 (!)의 다중 오버로드를 제공하는 것처럼 들립니다. NHibernate 및/또는 Castle으로 디버깅 할 수 있다면 (즉, PDB가 있거나 직접 구축 한 경우) 이것은 매우 간단해야합니다. – Rup
Rup, 네 말이 맞아. Castle이 Monitor.Enter를 찾고 있다고 [1]에서 보았습니다. 그러나 .NET 4.0에서이 메소드에는 2 개의 서명이 있습니다. Castle DynamicProxy 1.1.5의 소스를 찾을 수 없습니다. 다시 컴파일 할 수 없습니다. 어쨌든 고맙습니다. [1] http://www.symbolsource.org/Public/Metadata/Project/Castle/1.0-RC3/Debug/All/Castle.DynamicProxy/Castle.DynamicProxy/Builder/CodeBuilder/SimpleAST/LockBlockExpression.cs – ssambi
당신 성의 예전 코드를 여기에서 얻을 수 있습니다 : http://github.com/castleproject/castle –