【发布时间】:2017-03-04 22:43:46
【问题描述】:
我只是想生成只生成一个 int 常量的代码。这是代码: 字符串名称 = Path.GetFileNameWithoutExtension(outputPath); 字符串文件名 = Path.GetFileName(outputPath);
AssemblyName assemblyName = new AssemblyName(name);
AssemblyBuilder assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave); //, Path.GetDirectoryName(outputPath));
ModuleBuilder moduleBuilder = assembly.DefineDynamicModule(name, filename);
TypeBuilder programType = moduleBuilder.DefineType(name + ".Program");
MethodBuilder mainMethod = programType.DefineMethod("Main", MethodAttributes.Static, typeof(void), System.Type.EmptyTypes);
assembly.SetEntryPoint(mainMethod);
ILGenerator generator = mainMethod.GetILGenerator();
generator.Emit(OpCodes.Ldc_I4, (int)Value);
generator.Emit(OpCodes.Ret);
programType.CreateType();
assembly.Save(filename);
当我执行 .exe 时,它给出了异常 为什么?
【问题讨论】:
-
正如它所说,您的 MSIL 不正确。堆栈不平衡,请考虑删除 Ldc_I4 指令。
-
你的意思是:堆栈不平衡?如果我删除 Ldc_I4 指令,那么它什么也不做,那不是我想要的。我想要的行为就像声明一个可以使用或不使用的值。我可以这样做吗?
标签: compiler-errors .net-assembly system.reflection reflection.emit ilgenerator