When writing a test case, I encountered another missing feature. This is
with mono4windows (0.12-20-6-2002). When I run the attached code it
says:
Before CreateType
Before Invoke
(process:3972): ** WARNING **: unhandled exception
System.NotImplementedException: "The requested feature is not yet
implemented"
in <0x00032> System.Reflection.Emit.TypeBuilder:GetMethodImpl
(string,System.Reflection.BindingFlags,System.Reflection.Binder,System.R
eflection.CallingConventions,System.Type[],System.Reflection.ParameterMo
difier[])
in <0x0006a> System.Type:GetMethod (string)
in <0x002d4> .Test:Main ()
RESULT: -1
I haven't yet submitted a bug, should this go under runtime or BCL?
Regards,
Jeroen
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED]] On Behalf Of Paolo Molaro
> Sent: Friday, June 21, 2002 14:42
> To: 'Mono'
> Subject: Re: [Mono-list] Re: Java VM for .NET
>
>
> On 06/21/02 Jeroen Frijters wrote:
> > BTW, the latest build I tried (beginning June) didn't yet
> support the
> > AppDomain.TypeResolve event that I use, so I haven't been
> able to run my
> > code on Mono.
>
> If you file a bug with a test case for what it should do, you have
> greater chances to have someone fix it.
>
> lupus
>
> --
> -----------------------------------------------------------------
> [EMAIL PROTECTED] debian/rules
> [EMAIL PROTECTED] Monkeys do it better
>
> _______________________________________________
> Mono-list maillist - [EMAIL PROTECTED]
> http://lists.ximian.com/mailman/listinfo/mono-list
>
using System;
using System.Reflection;
using System.Reflection.Emit;
class Test
{
private static AssemblyBuilder assemblyBuilder;
private static ModuleBuilder moduleBuilder;
private static TypeBuilder lazyType;
private static MethodBuilder lazyMethod;
public static void Main()
{
AppDomain.CurrentDomain.TypeResolve += new
ResolveEventHandler(MyResolver);
AssemblyName name = new AssemblyName();
name.Name = "MyDynamicAssembly";
assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(name,
AssemblyBuilderAccess.Run);
moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
lazyType = moduleBuilder.DefineType("LazyType");
lazyMethod = lazyType.DefineMethod("lazyMethod",
MethodAttributes.Public | MethodAttributes.Static, typeof(void), Type.EmptyTypes);
TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType");
MethodBuilder methodBuilder = typeBuilder.DefineMethod("method",
MethodAttributes.Public | MethodAttributes.Static, typeof(void), Type.EmptyTypes);
ILGenerator ilGenerator = methodBuilder.GetILGenerator();
// NOTE: when this method is JITted the AppDomain.TypeResolve event
should fire
ilGenerator.Emit(OpCodes.Call, lazyMethod);
ilGenerator.Emit(OpCodes.Ret);
Console.WriteLine("Before CreateType");
Type type = typeBuilder.CreateType();
Console.WriteLine("Before Invoke");
type.GetMethod("method").Invoke(null, new object[0]);
}
private static Assembly MyResolver(object sender, ResolveEventArgs args)
{
Console.WriteLine("TypeResolve {0}", args.Name);
if(args.Name == "LazyType")
{
ILGenerator ilGenerator = lazyMethod.GetILGenerator();
ilGenerator.EmitWriteLine("Running lazy method");
ilGenerator.Emit(OpCodes.Ret);
lazyType.CreateType();
return assemblyBuilder;
}
return null;
}
}