c# - 带有错误的 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”