I am trying to Stub IUnityContainer using Rhino Mocks, and with this change the problem persists.
The exception is the following: System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B) at IUnityContainerProxy878915366750464caf2756ec11621ba0.RegisterType<TFrom,TTo> (InjectionMember[] injectionMembers) at SecurityModule.SecurityModule.RegisterViewsAndServices() in SecurityModule.cs: line 39 at SecurityModule.SecurityModule.Initialize() in SecurityModule.cs: line 31 at SecurityModule.Tests.SecurityModuleTests.InitializeShouldRegisterLoginView () in SecurityModuleTests.cs: line 41 Other symptoms: I need to run in debug mode, otherwise I get the following exception when I try to create the stub. System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B) at System.Reflection.Emit.TypeBuilder._TermCreateClass(Int32 handle, Module module) at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock() at System.Reflection.Emit.TypeBuilder.CreateType() at Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter.BuildType () in AbstractTypeEmitter.cs: line 271 at Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter.BuildType () in AbstractTypeEmitter.cs: line 275 at Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.GenerateCode (Type proxyTargetType, Type[] interfaces, ProxyGenerationOptions options) in InterfaceProxyWithTargetGenerator.cs: line 326 at Castle.DynamicProxy.DefaultProxyBuilder.CreateInterfaceProxyTypeWithoutTarget (Type theInterface, Type[] interfaces, ProxyGenerationOptions options) in DefaultProxyBuilder.cs: line 70 at Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyTypeWithoutTarget (Type theInterface, Type[] interfaces, ProxyGenerationOptions options) in ProxyGenerator.cs: line 392 at Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget (Type theInterface, Type[] interfaces, ProxyGenerationOptions options, IInterceptor[] interceptors) in ProxyGenerator.cs: line 262 at Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget (Type theInterface, Type[] interfaces, IInterceptor[] interceptors) in ProxyGenerator.cs: line 239 at Rhino.Mocks.MockRepository.MockInterface(CreateMockState mockStateFactory, Type type, Type[] extras) in MockRepository.cs: line 816 at Rhino.Mocks.MockRepository.CreateMockObject(Type type, CreateMockState factory, Type[] extras, Object[] argumentsForConstructor) in MockRepository.cs: line 874 at Rhino.Mocks.MockRepository.Stub(Type type, Object[] argumentsForConstructor) in MockRepository.cs: line 1321 at Rhino.Mocks.MockRepository.GenerateStub(Type type, Object[] argumentsForConstructor) in MockRepository.cs: line 1343 at Rhino.Mocks.MockRepository.GenerateStub<T>(Object[] argumentsForConstructor) in MockRepository.cs: line 1332 at SecurityModule.Tests.SecurityModuleTests.InitializeShouldRegisterLoginView () in SecurityModuleTests.cs: line 37 On Jan 12, 7:28 am, "Fabian Schmied" <[email protected]> wrote: > Fixed on the trunk. Thanks, Krzystof, for investigating the problem. I > fixed it by making AddFieldToCacheMethodTokenAndStatementsToInitialize > perform the check forgenericmethods. > > Fabian > > On Mon, Jan 12, 2009 at 12:54 PM, Fabian Schmied > > <[email protected]> wrote: > > This is definitely a bug in ImplementBlankInterface, which for some > > reason doesn't use the "CacheMethodTokens" method. The current > > workaround forgenericmethodsin "CacheMethodTokens" is to not cache > > them (your solution number 2), so ImplementBlankInterface shouldn't > > cache them either. > > > I'll fix this. > > > Fabian > > > PS: Yes, it's inefficient, and maybe we should talk about fixing this, > > but I'll make it consistent first, we can optimize later. > > > On Mon, Jan 12, 2009 at 12:03 PM, Krzysztof Kozmic <[email protected]> > > wrote: > > >> Craig, > > >> The problem is in .cctor, when trying to get MethodInfo of thegeneric > >> method with ldtoken. > >> Unfortunately the API for opengenericmethodsseems to be broken, and > >> I couldn't find a clean way of getting Methodinfo for such a method. > >> There are two solutions for that. > > >> 1. Try to cache the method in some other way, than by ldtoken > >> The best I came up with so far is this: > >> MemberInfo[]methods= type.GetMember( "MethodName", > >> MemberTypes.Method, > >> BindingFlags.Instance > >> | > >> BindingFlags.Public > >> | > > >> BindingFlags.NonPublic ); > >> //and now filter out the method we need, and assign it to > >> the cache field > > >> We get the MethodInfos for not only thegenericmethod, but for all > >>methodswith the same name, and we need to filter it out. > > >> 2. Alternatively, easler thing to do, is to not cache thegeneric > >> method. > > >> This requires changing ImplementBlankInterface method of > >> BaseProxyGenerator, so that in foreach loop when current method is open > >>genericmethod > >> it won't get cached. > > >> I don't have access to the repository to create the patch, but it's > >> straightforward. > >> With that little change your test, as well as all other pass. > > >> This however means worse performance. Probably someone should create a > >> solution that does a lot operations with thesegenericmethods, and > >> profile it to see how well it behaves. > >> If the performance hit is significant, we might try the 1st approach > >> and see if it improves things. > > >> Krzysztof > > >>>>> [email protected] 2009-01-10 19:04:18 >>> > >> Krzysztof, Fabian > > >> It looks like the problem is when creating interfaces proxies while > >> specifying additional interfaces that includegenericmethods. I > >> created a > >> unit test to demonstrate the problem. It is checked in on DP2 trunk > >> with > >> the Ignore attribute. > > >>http://svn.castleproject.org:8080/svn/castle/trunk/Tools/Castle.Dynam... > > >> I am currently trying to resolve this defect in the WCF integration > >> facility > >>http://support.castleproject.org/projects/DYNPROXY/issues/view/DYNPRO... > > >> Thanks for your help, > >> Craig > > >> I also have defects when creating class proxies that call selfgeneric > >>methods. This is happening when using MS MVC Controllers that have > >>generic > >>methods, but that is something totally different and I'll create more > >> broken > >> tests for that too. > > >> On Sat, Jan 10, 2009 at 2:33 AM, Fabian Schmied > >> <[email protected]>wrote: > > >>> > Does anyone have any idea the extent of change to DP2 to support > >>proxying > >>> >genericmethods? Got a few defects from that. > > >>> This is actually implemented. There are, however, a few bugs in the > >>> .NET 2.0 CLR (before SP2, at least), which make this really hard to > >>> get right. There are a few workarounds in there (eg. tokens of > >>generic > >>>methodsaren't cached, there is this ominous > >>> IInvocation.GetConcreteMethod API, etx), but in principle, it should > >>> work. > > >>> What exactly are the defects you have? > > >>> Fabian > > >> CONFIDENTIALITY NOTICE > >> This message is intended exclusively for the individual or entity to which > >> it is addressed. This communication may contain information that is > >> proprietary, privileged, confidential or otherwise legally exempt from > >> disclosure. If you are not the named addressee, you are not authorized to > >> read, print, retain, copy or disseminate this message or any part of it. > >> If you have received this message in error, please delete all copies of > >> this message and notify the sender immediately by return mail or fax ATSI > >> S.A.(+4812) 285 36 04. > >> Any email attachment may contain software viruses which could damage your > >> own computer system. Whilst reasonable precaution has been taken to > >> minimise this risk, we cannot accept liability for any damage which you > >> sustain as a result of software viruses. You should therefore carry out > >> your own virus checks before opening any attachments. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en -~----------~----~----~----~------~----~------~--~---
