Thank you, I found the code and downloaded it.
https://github.com/continuoustests
I am not sure if If I can find the correct hint and would appreciate a bit 
more help. In other words I feel a little bit over strained with that many 
code.
I found another method 

 private static TypeReference GetDeclaringType(TypeReference declaringType)
    {
      // Instantiate the generic type before determining
      // the current method
      if (declaringType.GenericParameters.Count > 0)
      {
        var genericType = new GenericInstanceType(declaringType);
        foreach (GenericParameter parameter in 
declaringType.GenericParameters)
        {
          genericType.GenericArguments.Add(parameter.);
        }

        declaringType = genericType;
      }
      return declaringType;
    }

and added this to my code. The result is 
static StatefulValue()
{
    Console.WriteLine("Static Constructor of class StatefulValue`2");
    FTRACEDOMAIN_AEE2EE2A_E374_4555_A5EC_7B147AD45DD4 = new 
FTraceDomain(typeof(StatefulValue<TState, TValue>));
}

But still I get the outOfMemoryException in Initializer.

Now I added a dummy class which does exactly the stuff I want to inject 

  class Dummy<A, B>
  {
    static private FTraceDomain domain = new FTraceDomain(typeof(Dummy<A, 
B>));

    public Dummy()
    {
      using (FTrace t = new FTrace(domain, "Dummy"))
      {
        
      }
    } 
  }

and the IL code of the static constructor shows (reflector):

 .method private hidebysig specialname rtspecialname static void 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Void>
 *.cctor 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://MeVis.Tools.TracingInjector:3.0.0.0/MeVis.Tools.TracingInjector.Dummy<,>/.cctor()>*()
 cil managed
{
    .maxstack 8
    L_0000: ldtoken MeVis.Tools.TracingInjector.Dummy`2 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://MeVis.Tools.TracingInjector:3.0.0.0/MeVis.Tools.TracingInjector.Dummy<,>><!A,
 !B>
    L_0005: call class [mscorlib 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089>]System.Type
 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Type>
 [mscorlib 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089>]System.Type
 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Type>::GetTypeFromHandle
 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Type/GetTypeFromHandle(System.RuntimeTypeHandle):System.Type>(valuetype
 [mscorlib 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089>]System.RuntimeTypeHandle
 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.RuntimeTypeHandle>)
    L_000a: newobj instance void 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Void>
 [syngo.Common 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://syngo.Common:1.0.0.0:008145f79b9aec14>]syngo.Common.Diagnostics.Tracing.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
 
<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)>(class
 [mscorlib 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089>]System.Type
 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:4.0.0.0:b77a5c561934e089/System.Type>)
    L_000f: stsfld class [syngo.Common 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://syngo.Common:1.0.0.0:008145f79b9aec14>]syngo.Common.Diagnostics.Tracing.FTraceDomain
 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://syngo.Common:1.0.0.0:008145f79b9aec14/syngo.Common.Diagnostics.Tracing.FTraceDomain>
 MeVis.Tools.TracingInjector.Dummy`2 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://MeVis.Tools.TracingInjector:3.0.0.0/MeVis.Tools.TracingInjector.Dummy<,>><!A,
 !B>::domain 
<http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://MeVis.Tools.TracingInjector:3.0.0.0/MeVis.Tools.TracingInjector.Dummy<<!0>,<!1>>/domain:syngo.Common.Diagnostics.Tracing.FTraceDomain>
    L_0014: ret 
}


What does <!A, !B> mean and how to I receive it via monocecil?


Am Donnerstag, 5. Februar 2015 13:55:46 UTC+1 schrieb Greg Young:
>
> 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] <javascript:>> 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] <javascript:>.
>> 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