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.

Reply via email to