我只是想生成只生成int常数的代码。这是代码: 字符串名称= path.getFilenamewithOutExtension(outputpath); 字符串fileName = 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时,它给出了例外为什么?
,如下所示,您可以定义使用void返回类型的方法。
但是您生成的IL返回int(在RET指令之前堆栈的内容)。
如果您替换了
替换decenemethod行MethodBuilder mainMethod = programType.DefineMethod("Main", MethodAttributes.Static, typeof(int), System.Type.EmptyTypes);
你会做对的。
通常可以使用ILSPY找到大多数IL错误,以拆卸您的可执行文件(或库)。
在您的情况下,您会看到:
static void Main()
{
12;
}
显然是错误的。