0
我正在嘗試將.NET 3.5項目升級到.Net 4.5,一切正常,但一個DynamicMethod導致'操作可能會破壞運行時'異常動態方法OpCodes.Stfld導致'操作可能會破壞運行時'
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(值,index)返回的System.Guid如預期,但調用fieldSetter引起 '操作可能會破壞運行時' 異常。
我對IL沒有任何經驗,所以我真的不知道從哪裏開始調試。 PEVerify不會返回任何錯誤。任何幫助將不勝感激。