小编Tho*_*ats的帖子

Reflection.Emit通用基类通用方法调用

我动态地对具有泛型方法的泛型类型(填充它的契约)进行子类化.我试图调用这个泛型方法,但我生成的程序集有错误.尝试打开程序集时,Reflector崩溃,并且此代码段无法运行.

我得到的例外是:

尝试加载格式不正确的程序.(HRESULT异常:0x8007000B)

任何帮助,将不胜感激.我将安装PEVerify来查看生成的代码.

using System;
using System.Reflection;
using System.Reflection.Emit;

public class TestClass<TFirst>
{
    public void TestMethod<TSecond>()
    {
        Console.WriteLine("It works");
    }
}
public class Program
{
    static void Main(string[] args)
    {
        // create a dynamic assembly and module 
        var assemblyName = new AssemblyName("DynamicAssembly");
        var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
        var module = assemblyBuilder.DefineDynamicModule("DynamicAssembly.dll");

        // public class Voodoo.Dynamic.Class : TestClass<object>
        var testClass = typeof(TestClass<>);
        var testClassOfObject = testClass.MakeGenericType(typeof(object));
        var typeBuilder = module.DefineType(
            "Voodoo.Dynamic.Class",
            TypeAttributes.Public | TypeAttributes.Class,
            testClassOfObject);

        // public void Run()
        var …
Run Code Online (Sandbox Code Playgroud)

c# generics reflection code-generation reflection.emit

3
推荐指数
1
解决办法
2613
查看次数