Я пытаюсь передать метод заданного поля для свойства в динамической сборке.
Требуемый код C #:
private readonly Dictionary<string, object> propertyBag = new Dictionary<string, object>();
public string PropertyName
{
set { propertyBag["PropertyName"] = value; }
}
PropertyName и его тип должен быть динамическим
Мой код для установки установщика:
PropertyBuilder propertyBuilder = typeBuilder.DefineProperty(propertyName, PropertyAttributes.None, propertyType, Type.EmptyTypes);
FieldBuilder fieldBuilder = typeBuilder.DefineField("propertyBag", typeof(Dictionary<string, object>), FieldAttributes.Private);
MethodBuilder setMethodBuilder = typeBuilder.DefineMethod($"set_{propertyName}", MethodAttributes.Public | MethodAttributes.HideBySig, null, new[] { propertyType });
ILGenerator setIL = setMethodBuilder.GetILGenerator();
setIL.Emit(OpCodes.Ldarg_0);
setIL.Emit(OpCodes.Ldarg_1);
setIL.Emit(OpCodes.Ldfld, fieldBuilder);
setIL.Emit(OpCodes.Ldstr, propertyName);
setIL.Emit(OpCodes.Callvirt, fieldBuilder.FieldType.GetMethod("set_Item", new Type[] { typeof(string), typeof(object) }));
setIL.Emit(OpCodes.Ret);
propertyBuilder.SetSetMethod(setMethodBuilder);
При запуске кода, который устанавливает свойство, у меня есть
AccessViolationException : Попыткачитать или писать защищенную память.Это часто указывает на то, что другая память повреждена.
Идея?