@daniil14056

Почему не находит поле System.FieldAccessException при создании динамического метода?

{
            AssemblyName assemblyName = new AssemblyName("DynamicAssembly");
            AssemblyBuilder assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
            ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("DynamicModule"); 
            TypeBuilder typeBuilder = moduleBuilder.DefineType("DynamicType", TypeAttributes.Public);
            MethodBuilder methodBuilder = typeBuilder.DefineMethod(name, MethodAttributes.Public | MethodAttributes.Static, typeof(void), null); 
     var il = methodBuilder.GetILGenerator();
            il.Emit(OpCodes.Ldc_I4, 100);
            il.Emit(OpCodes.Stsfld, typeof(main).GetField("Val", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static ));

            il.Emit(OpCodes.Ret); 
}
 private static int Val;

Уже n-ый раз сталкиваюсь с этой проблемой. Почему, ловлю
Unhandled exception. System.FieldAccessException: Attempt by method 'DynamicType.a()' to access field

Как получить поле?
Если делать через DynamicMethod то все ок, предположу что дело в сборке. а как к той сборке добавить свою.
  • Вопрос задан
  • 27 просмотров
Пригласить эксперта
Ответы на вопрос 1
yarosroman
@yarosroman Куратор тега C#
C# the best
У тебя поле приватное, а ты к немы даже из другой сборки лезешь. А DynamicMethod, у тебя в этом же классе скорее всего был делегат для него.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы