如何在C#中使用反射发射API创建委托(类型)?

时间:2018-12-26 01:51:37

标签: c# .net dynamic reflection delegates

如何将委托类型发射到动态程序集中(反射发射API)?
我研究了System.Reflection.Emit.DynamicMethod.CreateDelegateSystem.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:父级没有默认构造函数。默认构造函数必须明确定义。

我在那里尝试了许多其他选择...
请帮忙。

0 个答案:

没有答案