如何将委托类型发射到动态程序集中(反射发射API)?
我研究了System.Reflection.Emit.DynamicMethod.CreateDelegate
和System.Reflection.MethodInfo.CreateDelegate
方法。不幸的是,它们没有在动态程序集中创建委托类型(作为程序集的成员)。
这是我到目前为止尝试过的代码:
const string FileName = "MyDynamicLib.dll";
AppDomain currentDomain = AppDomain.CurrentDomain;
AssemblyName assemblyName = new AssemblyName("MyAssembly");
AssemblyBuilder assemblyBuilder = currentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", FileName, true);
TypeBuilder myDelegateType = moduleBuilder.DefineType(
"MyNamespace.MyDelegate<T1,T2,T3,TResult>",
TypeAttributes.Public,
typeof(MulticastDelegate),
new Type[] { }
);
myDelegateType.CreateType();
assemblyBuilder.Save(FileName, PortableExecutableKinds.Required32Bit, ImageFileMachine.I386);
但是,这不起作用...它在CreateType
调用上引发异常:
System.NotSupportedException:父级没有默认构造函数。默认构造函数必须明确定义。
我在那里尝试了许多其他选择...
请帮忙。