为什么我要获得系统



我只是想生成只生成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;
}

显然是错误的。

相关内容

  • 没有找到相关文章

最新更新