Ric*_*osa 3 c# reflection.emit
驻留在AssemblyA中的Method1可以向驻留在AssemblyB中的Method1发出OpCodes.Jmp吗?两种方法都具有相同的确切签名
我似乎无法使这项工作,总是得到System.InvalidProgramException:公共语言运行时检测到一个无效的程序.
如果重定向位于同一个程序集中,则可以正常工作.
如果可能,请使用Reflection.Emit提供示例.
你一定错过了什么.两种方法都是静态的吗 他们有相同的召集惯例吗?
以下代码不会重现您的问题:
static void Main(string[] args)
{
var assembly = AppDomain.CurrentDomain.DefineDynamicAssembly
(new AssemblyName("TestAssembly"), AssemblyBuilderAccess.Run);
var module = assembly.DefineDynamicModule("Main");
var type = module.DefineType("Test");
var method = type.DefineMethod
(
"Test", MethodAttributes.Public | MethodAttributes.Static,
typeof(int), new[] { typeof(string) }
);
var gen = method.GetILGenerator();
gen.Emit(OpCodes.Jmp, typeof(Class1).GetMethod("Test"));
var obj = Activator.CreateInstance(type.CreateType());
var func = (Func<string, int>)
obj.GetType().GetMethod("Test").CreateDelegate(typeof(Func<string, int>));
var result = func("Banana");
Console.WriteLine(result);
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
在不同的集会中,Test班级:
public static class Class1
{
public static int Test(string hi)
{
return 42;
}
}
Run Code Online (Sandbox Code Playgroud)
你确定你没有违反任何限制吗?