Создание метода динамически и его выполнение

Фон:

Я хочу определить несколькоstatic методы в C # и генерируют код IL в виде байтового массива из одного из этих методов, выбранных во время выполнения (на клиенте), и отправляют байтовый массив по сети на другой компьютер (сервер), где он должен выполняться после повторной генерации IL код из байтового массива.

Моя попытка: (POC)

public static class Experiment
{
    public static int Multiply(int a, int b)
    {
        Console.WriteLine("Arguments ({0}, {1})", a, b);
        return a * b;
    }
}

И тогда я получаю код IL тела метода, как:

BindingFlags flags = BindingFlags.Public | BindingFlags.Static;
MethodInfo meth = typeof(Experiment).GetMethod("Multiply", flags);
byte[] il = meth.GetMethodBody().GetILAsByteArray();

До сих пор я ничего не создавал динамически. Но у меня есть IL-код в виде байтового массива, и я хочу создать сборку, затем модуль в ней, затем тип, затем метод - все динамически. При создании тела метода динамически создаваемого метода я использую код IL, который я получил, используя отражение в приведенном выше коде.

Код генерации кода выглядит следующим образом:

AppDomain domain = AppDomain.CurrentDomain;
AssemblyName aname = new AssemblyName("MyDLL");
AssemblyBuilder assemBuilder = domain.DefineDynamicAssembly(
                                               aname, 
                                               AssemblyBuilderAccess.Run);

ModuleBuilder modBuilder = assemBuilder.DefineDynamicModule("MainModule");

TypeBuilder tb = modBuilder.DefineType("MyType", 
                            TypeAttributes.Public | TypeAttributes.Class);

MethodBuilder mb = tb.DefineMethod("MyMethod", 
     MethodAttributes.Static | MethodAttributes.Public, 
     CallingConventions.Standard,
     typeof(int),                          // Return type
     new[] { typeof(int), typeof(int) });  // Parameter types

mb.DefineParameter(1, ParameterAttributes.None, "value1");  // Assign name 
mb.DefineParameter(2, ParameterAttributes.None, "value2");  // Assign name 

//using the IL code to generate the method body
mb.CreateMethodBody(il, il.Count()); 

Type realType = tb.CreateType();

var meth = realType.GetMethod("MyMethod");
try
{
    object result = meth.Invoke(null, new object[] { 10, 9878 });
    Console.WriteLine(result);  //should print 98780 (i.e 10 * 9878)
}
catch (Exception e)
{
    Console.WriteLine(e.ToString());
}

Но вместо печати98780 в окне вывода выдается исключение, говорящее:

System.Reflection.TargetInvocationException: исключение было сгенерировано целью вызова. ---> System.TypeLoadException: не удалось загрузить тип 'Invalid_Token.0x0100001E' из сборки 'MyDLL, версия = 0.0.0.0, культура = нейтральная, PublicKeyToken = null'.
в MyType.MyMethod (Int32 значение1, Int32 значение2) [...]

Пожалуйста, помогите мне выяснить причину ошибки и как ее исправить.

Ответы на вопрос(6)

Ваш ответ на вопрос