이 코드는 예외입니다. 호출 예외가 발생하면 어떻게되는지 알 수 없습니다. 스택 인터 거를 밀어 넣을 때 작동하기 때문에 추가로 생각하는 것이 있습니다. 내가 lvalue를 밀어 그것은 작동하지 않았다, 감사합니다동적 코드 생성 관련 문제
static void Main(string[] args)
{
AppDomain dominioAplicacion = System.Threading.Thread.GetDomain();
AssemblyName nombre_Del_Ensamblado = new AssemblyName("ASS");
AssemblyBuilder ensambladoBld = dominioAplicacion.DefineDynamicAssembly(nombre_Del_Ensamblado, AssemblyBuilderAccess.RunAndSave);
ModuleBuilder moduloBld = ensambladoBld.DefineDynamicModule("<MOD");
TypeBuilder claseContenedoraBld = moduloBld.DefineType("claseContenedora");
MethodBuilder mainBld = claseContenedoraBld.DefineMethod("main", MethodAttributes.Public | MethodAttributes.Static, typeof(void), Type.EmptyTypes);
ILGenerator il = mainBld.GetILGenerator();
FieldBuilder campoBld = claseContenedoraBld.DefineField("x", typeof(int), FieldAttributes.Public | FieldAttributes.Static);
il.Emit(OpCodes.Ldc_I4, 2);
il.Emit(OpCodes.Stsfld, campoBld);
FieldBuilder campoBld1 = claseContenedoraBld.DefineField("x1", typeof(int), FieldAttributes.Public | FieldAttributes.Static);
il.Emit(OpCodes.Ldc_I4, 2);
il.Emit(OpCodes.Stsfld, campoBld1);
il.Emit(OpCodes.Ldftn, campoBld);
//il.Emit(OpCodes.Unbox, typeof(int));
//il.Emit(OpCodes.Stloc_0);
il.Emit(OpCodes.Ldloc_0);
il.Emit(OpCodes.Ldftn, campoBld1);
//il.Emit(OpCodes.Unbox, typeof(int));
il.Emit(OpCodes.Stloc_1);
il.Emit(OpCodes.Ldloc_1);
//il.Emit(OpCodes.Box, typeof(int));
//il.Emit(OpCodes.Ldftn, campoBld1);
//il.Emit(OpCodes.Unbox, typeof(int));
il.Emit(OpCodes.Add);
il.Emit(OpCodes.Pop);
//il.Emit(OpCodes.Stsfld, campoBld1);
il.Emit(OpCodes.Ret);
Type t = claseContenedoraBld.CreateType();
object ptInstance = Activator.CreateInstance(t, new Type[] { });
t.InvokeMember("main", BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public,
null,
ptInstance,
new object[0]);
var x = t.GetField("x");
}
예외 텍스트를 게시하십시오. – Oded
전체 IL 코드는 무엇이되어야합니까? IL 코드가 어셈블리에 있다면 작동할까요? 나는 그곳에서 오류를 찾기 시작할 것입니다 – Axarydax