static DynamicResolver() { var assembly = typeof(DynamicMethod).Assembly; dynamicResolverType = assembly.GetType("System.Reflection.Emit.DynamicResolver"); dynamicILInfoType = assembly.GetType("System.Reflection.Emit.DynamicILInfo"); dynamicILGeneratorType = assembly.GetType("System.Reflection.Emit.DynamicILGenerator"); BuildFactoryByDynamicILInfo(); BuildFactoryByDynamicILGenerator(); BuildGetCodeInfoDelegate(); BuildGetRawEHInfoDelegate(); BuildGetEHInfoDelegate(); var m_methodField = dynamicResolverType.GetField("m_method", BindingFlags.Instance | BindingFlags.NonPublic); if (m_methodField == null) { throw new InvalidOperationException("Field 'DynamicResolver.m_methodField' is not found"); } m_methodSetter = FieldsExtractor.GetSetter(m_methodField); var m_resolverField = typeof(DynamicMethod).GetField("m_resolver", BindingFlags.Instance | BindingFlags.NonPublic); if (m_resolverField == null) { throw new InvalidOperationException("Field 'DynamicResolver.m_resolver' is not found"); } m_resolverSetter = FieldsExtractor.GetSetter <DynamicMethod, object>(m_resolverField); var m_localSignatureField = dynamicResolverType.GetField("m_localSignature", BindingFlags.Instance | BindingFlags.NonPublic); if (m_localSignatureField == null) { throw new InvalidOperationException("Field 'DynamicResolver.m_localSignature' is not found"); } m_localSignatureExtractor = FieldsExtractor.GetExtractor <object, byte[]>(m_localSignatureField); }
private static Expression GetSetter(FieldInfo field, Expression obj, Expression newValue) { var setter = FieldsExtractor.GetSetter(field); return(Expression.Invoke(Expression.Constant(setter), obj ?? Expression.Constant(null), Expression.Convert(newValue, typeof(object)))); }