首页 > 解决方案 > 带有错误的 C# 反射:公共语言运行时检测到无效程序

问题描述

我目前面临一个问题,我正在尝试通过反射构建动态方法

var attr = MethodAttributes.Public
                    | MethodAttributes.SpecialName
                    | MethodAttributes.HideBySig;
var methodGetBuilder = _typeBuilder.DefineMethod($"__Inject_From__", attr, null, new[] { typeof(Something)});
var methodIL = methodGetBuilder.GetILGenerator();
var ret = methodIL.DefineLabel();
var endIf = methodIL.DefineLabel();

methodIL.Emit(OpCodes.Nop);
methodIL.Emit(OpCodes.Ldarg_1);
methodIL.Emit(OpCodes.Ldnull);
methodIL.Emit(OpCodes.Ceq);
methodIL.Emit(OpCodes.Stloc_0);
methodIL.Emit(OpCodes.Ldloc_0);
methodIL.Emit(OpCodes.Brfalse_S, endIf);
methodIL.Emit(OpCodes.Br_S, ret);
methodIL.MarkLabel(endIf);
....
methodIL.Emit(something);
....

methodIL.MarkLabel(ret);
methodIL.Emit(OpCodes.Ret);

它在 C# 代码中是等价的

void __Inject_From__(Something arg){
  if (arg == null) return;
  // do something
  .....
}

我的问题是为什么我会收到这个错误?

System.Reflection.TargetInvocationException: '调用的目标已抛出异常。'

内部异常

InvalidProgramException:公共语言运行时检测到无效程序。

项目的目标框架是“.NET Core 2.0”

标签: c#.net.net-core

解决方案


推荐阅读