We do it in continuoustests on github look in minimizer (sry at airport boarding so vant link etc) On 5 Feb 2015 14:53, "Reh Gina" <[email protected]> wrote:
> Now I am sure the generics are the bad ones. Does anybody know how to get > the Type of a class with generic parameters? > > Am Donnerstag, 5. Februar 2015 11:41:00 UTC+1 schrieb Reh Gina: >> >> May this be a problem with generic types? I suppose this only occurs for >> generic types because for generic types the reflector shows something like >> this >> >> FTRACEDOMAIN_AEE2EE2A_67c3e758-a6a1-45eb-9e59-9ff194abcc53 >> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://MeVis.Common.Utilities:3.0.0.0/MeVis.Common.Utilities.StatefulValue%3C,%3E/FTRACEDOMAIN_AEE2EE2A_67c3e758-a6a1-45eb-9e59-9ff194abcc53:syngo.Common.Diagnostics.Tracing.FTraceDomain> >> = new FTraceDomain >> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://syngo.Common:1.0.0.0:008145f79b9aec14/syngo.Common.Diagnostics.Tracing.FTraceDomain/.ctor(System.Type)>(typeof(StatefulValue >> >> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://MeVis.Common.Utilities:3.0.0.0/MeVis.Common.Utilities.StatefulValue%3C,%3E><,>)); >> >> >> What returns typeof(somegenerictype<>) ??? >> >> >> Am Donnerstag, 5. Februar 2015 09:07:46 UTC+1 schrieb Reh Gina: >>> >>> That makes no sense. I simply inject the initialization of a static >>> member into the static constructor. Looks like this afterwards (from >>> reflector): >>> >>> static *VersionMessage >>> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://MeVis.MeVisLab.RemoteClient:3.0.0.0/MeVis.MeVisLab.RemoteClient.Messages.VersionMessage/.cctor()>*() >>> { >>> FTRACEDOMAIN_AEE2EE2A_319e3e9d-6fab-4076-9a42-108dc52c976b >>> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://MeVis.MeVisLab.RemoteClient:3.0.0.0/MeVis.MeVisLab.RemoteClient.Messages.VersionMessage/FTRACEDOMAIN_AEE2EE2A_319e3e9d-6fab-4076-9a42-108dc52c976b:syngo.Common.Diagnostics.Tracing.FTraceDomain> >>> = new FTraceDomain >>> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://syngo.Common:1.0.0.0:008145f79b9aec14/syngo.Common.Diagnostics.Tracing.FTraceDomain/.ctor(System.Type)>(typeof(VersionMessage >>> >>> <http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://MeVis.MeVisLab.RemoteClient:3.0.0.0/MeVis.MeVisLab.RemoteClient.Messages.VersionMessage>)); >>> } >>> >>> >>> >>> The code which injects above line: >>> >>> >>> /// <nn /> >>> private static void >>> AddInitialisationOfFTraceDomainFieldToStaticConstructor( >>> ModuleDefinition module, >>> TypeDefinition type, >>> MethodDefinition staticConstructor) >>> { >>> staticConstructor.Body.SimplifyMacros(); >>> Instruction firstInstruction = >>> staticConstructor.Body.Instructions.First(); >>> ILProcessor ilProcessor = staticConstructor.Body.GetILProcessor(); >>> >>> Instruction loadClassTypeInstruction = >>> Instruction.Create(OpCodes.Ldtoken, type); >>> ilProcessor.InsertBefore(firstInstruction, loadClassTypeInstruction); >>> >>> Instruction callGetTypeInstruction = Instruction.Create(OpCodes.Call, >>> module.Import(typeof(System.Type).GetMethod("GetTypeFromHandle"))); >>> ilProcessor.InsertAfter(loadClassTypeInstruction, >>> callGetTypeInstruction); >>> >>> var domainConstructor = >>> >>> typeof(syngo.Common.Diagnostics.Tracing.FTraceDomain).GetConstructor(new[] >>> { typeof(Type) }); >>> var domainConstructorReference = module.Import(domainConstructor); >>> Instruction domainConstructorInstruction = >>> Instruction.Create(OpCodes.Newobj, domainConstructorReference); >>> ilProcessor.InsertAfter(callGetTypeInstruction, >>> domainConstructorInstruction); // create new instance of person >>> Instruction popFTraceDomainVariableInstruction = >>> Instruction.Create(OpCodes.Stsfld, _fTraceDomainField); >>> >>> ilProcessor.InsertAfter(domainConstructorInstruction, >>> popFTraceDomainVariableInstruction); >>> >>> staticConstructor.Body.OptimizeMacros(); >>> } >>> >>> >>> Am Mittwoch, 4. Februar 2015 17:18:44 UTC+1 schrieb Jb Evain: >>>> >>>> I'll go out on a limb an suggest your field initializer is taking a >>>> lot of memory? :) >>>> >>>> Can you show what you're injecting? >>>> >>>> On Wed, Feb 4, 2015 at 5:12 PM, Reh Gina <[email protected]> wrote: >>>> > Via injection I am adding a static field into a static class which >>>> already >>>> > contains two static fields. Injection code checks if static >>>> constructor is >>>> > already available, otherwise it will create one. In this case the >>>> static >>>> > constructor is available and the initialization of the static field >>>> is just >>>> > added before the existing instructions. At run time an >>>> OutOfMemoryException >>>> > occurs if accessing the injected object. >>>> > Does anybody has an Idea what can cause this exception? >>>> > >>>> > -- >>>> > -- >>>> > -- >>>> > mono-cecil >>>> > --- >>>> > You received this message because you are subscribed to the Google >>>> Groups >>>> > "mono-cecil" group. >>>> > To unsubscribe from this group and stop receiving emails from it, >>>> send an >>>> > email to [email protected]. >>>> > For more options, visit https://groups.google.com/d/optout. >>>> >>> -- > -- > -- > mono-cecil > --- > You received this message because you are subscribed to the Google Groups > "mono-cecil" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- -- -- mono-cecil --- You received this message because you are subscribed to the Google Groups "mono-cecil" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
