2016-08-01 1 views
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 (값, 지수)는 예상대로 system.Guid을 반환하지만 호출 fieldSetter 예외 '조작 런타임을 불안정하게 할 수'가 발생합니다.

일리노이에 대한 경험이 없으므로 디버깅을 시작할 위치를 잘 모릅니다. PEVerify는 오류를 반환하지 않습니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

0

필드가 비공개 일 수있는 경우 다른 동적 크기 지정 생성자를 사용하여 skipvisibilitycheck을 지정해야합니다.

관련 문제