我正在尝试将 .Net 3.5 项目升级到 .Net 4.5,一切正常,但一个 DynamicMethod 导致“操作可能破坏运行时”异常
public static FieldSetter<TField> CreateSetFieldDelegate<TField>(FieldInfo fieldInfo)
{
var dynamicMethod = new DynamicMethod(
"setfast_" + fieldInfo.Name,
null,
new[] { typeof(object), typeof(TField) },
fieldInfo.DeclaringType);
var ilGenerator = dynamicMethod.GetILGenerator();
ilGenerator.Emit(OpCodes.Ldarg_0);
ilGenerator.Emit(OpCodes.Ldarg_1);
ilGenerator.Emit(OpCodes.Stfld, fieldInfo);
ilGenerator.Emit(OpCodes.Ret);
return (FieldSetter<TField>)dynamicMethod.CreateDelegate(typeof(FieldSetter<TField>));
}
调用代码
var fieldSetter = Reflection.CreateSetFieldDelegate<Guid>(_fieldInfo);
return (dataProviderAdapter, target, values, index)
=> fieldSetter(target, dataProviderAdapter.GetGuid(values, index));
dataProviderAdapter.GetGuid(values, index) 按预期返回 system.Guid,但调用 fieldSetter 会导致“操作可能破坏运行时”异常。
我对 IL 没有任何经验,所以我真的不知道从哪里开始调试它。PEVerify 不返回任何错误。任何帮助将不胜感激。